成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

分享代碼片段:既能設(shè)置buffer大小,也能定時(shí)刷新(無(wú)論是否達(dá)到設(shè)定的buffer大小)的log4

xuxueli / 2597人閱讀

摘要:既能設(shè)置大小,也能定時(shí)刷新無(wú)論是否達(dá)到設(shè)定的大小的適用于既想使用的提高性能,又想定時(shí)強(qiáng)制輸出以不影響某些依賴(lài)日志輸出的后續(xù)流程的場(chǎng)景默認(rèn)的默認(rèn)的定時(shí)刷新間隔秒下一次刷新的時(shí)間點(diǎn)默認(rèn)的默認(rèn)的至少秒本必須是否則沒(méi)意義配置使用樣例

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Layout;

/**
 * 既能設(shè)置buffer大小,也能定時(shí)刷新(無(wú)論是否達(dá)到設(shè)定的buffer大小)的appender;適用于既想使用buffer的IO提高性能,又想定時(shí)強(qiáng)制輸出以不影響某些依賴(lài)日志輸出的后續(xù)流程的場(chǎng)景
 * 
 * @author pf-miles
 * @since 2015-4-7
 */
public class TimedBufferedDailyRollingFileAppender extends DailyRollingFileAppender {

    private static final int                                         CHECK_INTERVAL      = 5;
    private static final Object                                      appendersLock       = new Object();
    private static final List appenders           = new ArrayList();
    static {
        new Thread(new Runnable() {

            public void run() {
                while (true) {
                    try {
                        synchronized (appendersLock) {
                            for (TimedBufferedDailyRollingFileAppender appender : appenders)
                                appender.flush();
                        }
                        Thread.sleep(CHECK_INTERVAL * 1000);
                    } catch (Throwable t) {
                        // ignore...
                    }
                }
            }
        }, "TimedBufferedDailyRollingFileAppender-timed-flush").start();
    }
    private static final int                                         DEFAULT_BUFFER_SIZE = 1024 * 1024;                                           // 默認(rèn)1MB的buffer

    protected int                                                    flushInterval       = 60;                                                    // 默認(rèn)的定時(shí)刷新間隔(秒)

    private Date                                                     flushTime           = new Date();                                            // 下一次刷新的時(shí)間點(diǎn)

    public TimedBufferedDailyRollingFileAppender(){
        super();
        this.setBufferedIO(true);
        this.setBufferSize(DEFAULT_BUFFER_SIZE);// 默認(rèn)1MB的buffer
        this.setImmediateFlush(false);
        synchronized (appendersLock) {
            appenders.add(this);
        }
    }

    public TimedBufferedDailyRollingFileAppender(Layout layout, String filename, String datePattern) throws IOException{
        super(layout, filename, datePattern);
        this.setBufferedIO(true);
        this.setBufferSize(DEFAULT_BUFFER_SIZE);// 默認(rèn)1MB的buffer
        this.setImmediateFlush(false);
        synchronized (appendersLock) {
            appenders.add(this);
        }
    }

    private void flush() {
        if (!(new Date()).after(flushTime)) return;
        if (!checkEntryConditions()) return;
        qw.flush();
        this.flushTime = new Date(System.currentTimeMillis() + this.flushInterval * 1000);
    }

    public void setFlushInterval(int flushInterval) {
        if (flushInterval < CHECK_INTERVAL) flushInterval = CHECK_INTERVAL;// 至少CHECK_INTERVAL秒
        this.flushInterval = flushInterval;
    }

    // 本appender必須是bufferedIO, 否則沒(méi)意義
    @Override
    public boolean getBufferedIO() {
        return true;
    }

    @Override
    public void setBufferedIO(boolean bufferedIO) {
        super.setBufferedIO(true);
    }

    @Override
    public void setImmediateFlush(boolean value) {
        super.setImmediateFlush(false);
    }

    @Override
    public boolean getImmediateFlush() {
        return false;
    }
}

配置使用樣例:


        
        
        
        
        
        
            
        

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64331.html

相關(guān)文章

  • Java 日志系列篇一 原生 Java.util.logging

    摘要:理解在記錄消息中的日志的不同級(jí)別是非常重要的。通常來(lái)說(shuō),當(dāng)為指定了一個(gè)該會(huì)包含當(dāng)前指定級(jí)別以及更高級(jí)別的日志。,將消息發(fā)送至單個(gè)一般文件或一個(gè)可回滾的文件集合。 本文網(wǎng)大多網(wǎng)絡(luò)整理所得,出處太多,不一一列舉 簡(jiǎn)介 Java 中的 Logging API 讓 Java 應(yīng)用可以記錄不同級(jí)別的信息,它在debug過(guò)程中非常有用,如果系統(tǒng)因?yàn)楦鞣N各樣的原因而崩潰,崩潰原因可以在日志中清晰地追...

    tainzhi 評(píng)論0 收藏0
  • nginx配置詳解

    摘要:配置文件中文詳解定義運(yùn)行的用戶(hù)和用戶(hù)組進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)。但也有超過(guò)的情況,但是該值必須設(shè)置為系統(tǒng)分頁(yè)大小的整倍數(shù)。開(kāi)啟限制連接數(shù)的時(shí)候需要使用負(fù)載均衡配置的負(fù)載均衡,是權(quán)重,可以根據(jù)機(jī)器配置定義權(quán)重。 Nginx配置文件nginx.conf中文詳解 #定義Nginx運(yùn)行的用戶(hù)和用戶(hù)組 user www www; #nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)。 wor...

    wums 評(píng)論0 收藏0
  • Nginx配置文件學(xué)習(xí)筆記

    摘要:配置文件學(xué)習(xí)筆記定義運(yùn)行的用戶(hù)和用戶(hù)組進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)全局錯(cuò)誤日志定義類(lèi)型,進(jìn)程文件指定進(jìn)程可以打開(kāi)的最大描述符數(shù)目工作模式與連接數(shù)上限這個(gè)指令是指當(dāng)一個(gè)進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)與進(jìn)程數(shù)相除, Nginx配置文件學(xué)習(xí)筆記 定義Nginx運(yùn)行的用戶(hù)和用戶(hù)組 user nginx; Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù) worker...

    muddyway 評(píng)論0 收藏0
  • Nginx配置文件學(xué)習(xí)筆記

    摘要:配置文件學(xué)習(xí)筆記定義運(yùn)行的用戶(hù)和用戶(hù)組進(jìn)程數(shù),建議設(shè)置為等于總核心數(shù)全局錯(cuò)誤日志定義類(lèi)型,進(jìn)程文件指定進(jìn)程可以打開(kāi)的最大描述符數(shù)目工作模式與連接數(shù)上限這個(gè)指令是指當(dāng)一個(gè)進(jìn)程打開(kāi)的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開(kāi)文件數(shù)與進(jìn)程數(shù)相除, Nginx配置文件學(xué)習(xí)筆記 定義Nginx運(yùn)行的用戶(hù)和用戶(hù)組 user nginx; Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù) worker...

    MoAir 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<