<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-4  評論-10  文章-0  trackbacks-0

     

    Tuesday, June 05, 2012編寫
    2012年7月17日日更新

    如果是剛剛接觸logback,建議先下載本文最后的《Logback手冊.pdf》官方手冊閱讀。

    1 如何替換現有的log4j      
          現有項目:

     

    去掉slf4j-log4j.jar和log4j.jar,添加logback-core.jar、logback-classical.jar。然后刪除log4j.xml并且添加logback的配置文件logback.xml。(應用中有加載log4j配置文件的需要去掉)
    這里是針對項目中已經使用了log4j+slf4j組合的情況。
    如果現有項目只是使用了log4j,那么需要通過slf4j官方提供的工具修改項目源碼(工具就是slf4j下載文件夾下的slf4j-migrator.jar)。
    工具使用方法:http://www.slf4j.org/migrator.html

    如果項目使用的是log4j.properties來配置的,那么可以通過logback官方的工具轉為logback.xml,但如果是log4j.xml,那么還是重新編寫logback.xml比較好。
    轉換工具地址:http://logback.qos.ch/translator/ ,

    新項目:

    直接添加logback-core.jar、logback-classical.jar和log4j-over-slf4j.jar三個jar包,編寫logback.xml配置文件。

    2 重加載配置文件

    配置如下:

    <configuration scan="true" scanPeriod="30 seconds" >

      ...

    </configuration>

    如果不指定scanPeriod,默認情況下是每分鐘重新讀取的配置文件。這里可以通過scanPeriod屬性配置時間間隔,單位有:milliseconds, seconds, minutes or hours,如上面的三十秒(數值跟單位中間空格隔開)。這里沒有指定單位的情況下默認單位是milliseconds。

    PS

    1- 根據官方文檔,當scan設置為true,會自動添加一個過濾器,這個過濾器在logger線程中被調用。也就是說,當調用logger.debug(),這個方法執行前,會先調用過濾器的方法。假如這時logger的級別被設置成了info,那么logger.debug()任然會被調用。

    2- 自動加載會影響性能。因此,所以在實現上,不是每次logger調用都會去判斷scanPeriod是否到期,默認情況是沒16次調用會去檢查一下scanPeriod是否到期。所以說這個重加載會有很小的延遲。(開發環境中可以忽略)

    3 針對特定用戶輸入debug級別的日志。

             這里通過turboFilter來實現這個工具,如:在logback.xml中加入

    <turboFilter class="com.ztgame.test.logback.SampleFilter">

            <key>id=11,</key>

            <OnMatch>ACCEPT</OnMatch>

            <OnMismatch>NEUTRAL</OnMismatch>

        </turboFilter>

     

        SimpleFilter.java文件:

    public class SampleFilter extends TurboFilter {

        private String key;

        public String getKey() {

            return key;

             }

        public void setKey(String key) {

            this.key = key;

        }

        @Override

        public FilterReply decide(Marker marker, Logger logger, Level level,

                String format, Object[] params, Throwable t) {

            if (format != null && format.contains(key)) {

                return FilterReply.ACCEPT;

            } else {

                return FilterReply.DENY;

            }

        }

    }

    turboFilter是全局的,當logger的事件產生的時候就去做過濾。假如設置了logger的級別是info,上面的代碼能讓id為11的用戶信息打印出來。

    注意:    1. log的時候大家最好統一規范,潛規則是:

                        在什么【時間】,【人物】在【地點】做了【事件】【……

                       【時間】:日志記錄的時間

                       【人物】:日志記錄的對象,如:userId=11

                       【地點】:輸入日志的方法

                       【事件】:具體做了什么,如:買了xxx

                       ……】:其他相關信息,如:rpc耗時等等

                      

                       2. 單個信息后面加上固定分割符:如userId=11,(逗號)

     

    4 區分開發和生產環境

    logback默認加載配置文件的優先級是:logback-test.xml > logback.xml。在開發和測試階段提供logback-test.xml來達到區分生產環境與開發環境的目的。

    5 為每個用戶生產一個日志文件

             用SiftingAppender來實現

        logback.xml

    <appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">

        <discriminator>

            <Key>userid</Key>

            <DefaultValue>unknown</DefaultValue>

        </discriminator>

        <sift>

            <appender

    name="FILE-${userid}" class="ch.qos.logback.core.FileAppender">

            <File>log/${userid}.log</File>

            <Append>false</Append>

            <layout class="ch.qos.logback.classic.PatternLayout">

                <Pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</Pattern>

                    </layout>

                </appender>

            </sift>

        </appender>

    Java文件:

    logger.debug("Application started");

    MDC.put("userid", "Alice");

    logger.debug("Alice says hello");

    MDC.put("userid", null);

    logger.debug("Alice says hello2"); 

    這里需要在每次記錄log之前設置用戶信息。(有點麻煩,可以簡單封裝一下,適合新項目)

    6、log文件的壓縮和自動刪除       
            logback提供一套自動壓縮和刪除的機制,具體配置查看logback_demos中的示例。
            建議是這樣一種日志布局:

        |---------log根目錄

            |-----------------動態log文件(當前被使用)

            |-----------------backup目錄(用于存放日志備份)

                  ….

                |------------------------日期目錄(存放壓縮好的備份日志,,過期的會被自動刪除)
    附件:
    1. 附帶一些demos(eclipse項目) ,下載地址:logback_demos.zip 
    2. Logback官方中文手冊,下載地址:Logback手冊.pdf



    posted on 2012-06-05 13:56 沖杯茶喝 閱讀(9231) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 四虎国产精品免费永久在线| 在线观看国产一区亚洲bd| 成人毛片100免费观看| 亚洲性在线看高清h片| a级毛片免费观看网站| 久久影视综合亚洲| 国产V片在线播放免费无码| 在线精品亚洲一区二区三区| aa级毛片毛片免费观看久| 亚洲国产成人一区二区三区| 久久精品电影免费动漫| 亚洲日本在线免费观看| 免费无码肉片在线观看| 亚洲日韩AV一区二区三区四区| 精品免费国产一区二区| 国产区图片区小说区亚洲区| 免费一区二区视频| 免费无码又爽又刺激网站| 久久精品国产亚洲AV电影 | 亚洲欧洲免费视频| 久久丫精品国产亚洲av不卡| 又黄又爽又成人免费视频| 亚洲国产精品无码久久久秋霞1| 国产高清免费在线| 久久久久久久久久久免费精品| 亚洲AV乱码一区二区三区林ゆな| 久久WWW免费人成一看片| 亚洲AV无码一区二区三区网址| 亚洲精品国产自在久久| 人妻丰满熟妇无码区免费| 亚洲一卡一卡二新区无人区| 亚洲国产精品日韩| 91成人免费观看| 国产精品亚洲专区无码牛牛| 精品久久久久久亚洲| 日韩精品成人无码专区免费| 偷自拍亚洲视频在线观看| 久久精品国产亚洲av麻豆色欲 | 91精品啪在线观看国产线免费| 国产精品亚洲综合久久| 亚洲一区二区三区偷拍女厕|