<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲视频小说图片| www.999精品视频观看免费| 亚洲成人高清在线| 亚洲av无一区二区三区| 精品国产免费观看| 亚洲精品久久久久无码AV片软件| 999久久久免费精品国产| 亚洲日本国产精华液| 四虎永久在线观看免费网站网址| 日韩亚洲Av人人夜夜澡人人爽 | 国产成人免费a在线视频色戒| tom影院亚洲国产一区二区| 日韩免费a级毛片无码a∨| 亚洲香蕉久久一区二区三区四区| 女人毛片a级大学毛片免费| 亚洲午夜无码毛片av久久京东热| 国产美女被遭强高潮免费网站 | 97在线视频免费公开视频| 亚洲精品国产精品乱码视色| 三级黄色免费观看| 久久久综合亚洲色一区二区三区| 国产免费的野战视频| 亚洲AV综合永久无码精品天堂 | 午夜精品免费在线观看| 四虎亚洲精品高清在线观看| 日本免费观看网站| 国产免费牲交视频免费播放 | 国产一级a毛一级a看免费人娇| 日日噜噜噜噜夜夜爽亚洲精品| 久久久免费的精品| 亚洲熟伦熟女专区hd高清| JLZZJLZZ亚洲乱熟无码| 日本免费大黄在线观看| 亚洲乱亚洲乱妇无码| 亚洲精品制服丝袜四区| 一本岛高清v不卡免费一三区| 亚洲avav天堂av在线网毛片| 人人狠狠综合久久亚洲婷婷| 成人性生交大片免费看午夜a| 国产精品玖玖美女张开腿让男人桶爽免费看 | 色噜噜AV亚洲色一区二区|