2014年6月19日

[JAVA][log4j] log4j2.xml

log4j2的xml寫法和1.x有所不同

但我1.x時不是寫xml.....所以 更增加了轉換的痛苦



以下是原來的log4j.properties

log4j.rootLogger=ERROR, consoleAppender

log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss:SSS} [%t] %-5p %c %m%n

log4j.logger.myLog= INFO, A1
log4j.additivity.myLog = false
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=./logs/myLog.log
log4j.appender.A1.DatePattern ='_'yyyy-MM-dd'.log'
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss:SSS}][%p][%C.%M-%L] %m%n


如何能daily不同檔案 試了很多次 最後寫出下面的log4j2.xml

<Configuration
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xsi:noNamespaceSchemaLocation='Log4j-config.xsd'>
 
    <Appenders>
        <RollingFile name="A1" fileName="./logs/myLog.log"
                     filePattern="./logs/myLog_%d{yyyy-MM-dd_HH}.%i.log"> <!-- roll over every HOUR -->
            <PatternLayout>
                <Pattern>[%d{yyyy/MM/dd HH:mm:ss:SSS}][%p][%C.%M-%L] %m%n</Pattern>
            </PatternLayout>  
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/> <!-- roll over if log file size exceeds 100 MB -->
            </Policies>    
        </RollingFile>      
         
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss:SSS} [%t] %-5p %c %m%n"/>
        </Console>
    </Appenders>
 
    <Loggers>
        <Logger name="myLog" level="INFO" additivity="false">
            <AppenderRef ref="A1"/>
        </Logger>
   
        <Root level="ERROR">
            <AppenderRef ref="consoleAppender"/>
        </Root>
    </Loggers>
</Configuration>




其中幾個部份要注意:
filePattern:表示當日誌到達指定的大小或者時間,產生新日誌時,舊日誌的命名路徑。
本來以為「RollingFile」tag的屬性「filePattern」會直接對應原本的「DatePattern」

但不行...時間要改用%d{yyyy-MM-dd_HH}

為什麼比以前多了HH 我試了把HH拿掉...就不產生新檔了

而且如果要和fileName一樣的路徑 路徑部份也是要寫出來

範列中 fileName="./logs/myLog.log"  所以  filePattern="./logs/myLog_%d{yyyy-MM-dd_HH}.%i.log"


%i←指的是第幾個封存

PatternLayout:和log4j1一樣 對應到原本的「layout.ConversionPattern」



TimeBasedTriggeringPolicy 是以時間為基準觸發封存
interval:integer型,指定兩次封存動作之間的時間間隔。單位:小時
modulate:boolean型,說明是否對封存時間進行調製。若modulate=true,則封存時間將以0點為邊界進行偏移計算

本來以為我一天要一次 所以是interval:integer=24 但這樣的結果 封存的檔名HH會是23 不會是當下的時間


SizeBasedTriggeringPolicy 以檔案大小基準觸發封存
本來沒有設  但也造成產生不出新檔 案





沒有留言:

張貼留言