log4j按照日期分割


之前,對於log4j使用過但並沒有過多了解,朋友問我如何讓日志按照日期去生成,琢磨了一下記錄下來。

log4j.jar 包,可以直接在官方下載到:http://logging.apache.org/log4j/1.2/download.html

log4j-extr包,主要是立即生成自定義的文件名(原始的log4j生成的文件后綴名只能在第二天名稱才會變)
URL http://www.apache.org/dyn/closer.cgi/logging/log4j/companions/extras/1.1/apache-log4j-extras-1.1.zip

簡單說明:

Log4j配置中有5個重要的概念:日志記錄器(Logger)、根記錄器(rootLogger)、類別(category)、輸出地(Appender)以及日志格式化器(Layout)。其中,Logger負責記錄日志;rootLogger是所有記錄器的父親,任何記錄器都可繼承rooLogger的配置;category可以設置類別下所有的Logger,類似於java中的包,效果與Logger名字等價;Appender負責輸出到什么地方;Layout負責以什么格式輸出、輸出哪些附加信息(比如:時間、類名、方法名、所在行數等)。在log4j.properties配置中,log4j.logger后面配置的是Logger,log4j.appender后面配置的是Appender,rootLogger直接用log4j.rootLogger配置。

再說下說下log4j的幾種log級別的等級:
日志記錄器(Logger)的行為是分等級的。如下表所示:
分 為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別,這些級別是從高到低的級別。Log4j建議只使用四個級別,優先級從高到低分別是 ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了INFO級別, 則應用程序中所有DEBUG級別的日志信息將不被打印出來
使用方式:
1、引入jar
2、web.xml配置路徑,如果默認在根目錄下,則不需要,請忽略這一步(非必要)
3、編寫log4j.properties或者log4j.xml文件

# priority  :debug<info<warn<error
#you cannot specify every priority with different file for log4j 
log4j.rootLogger=debug,stdout,info,debug,warn,error 
 
#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
#info log
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.info.File=${catalina.base}/logs/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=INFO
log4j.appender.info.layout=org.apache.log4j.PatternLayout 
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=${catalina.base}/logs/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout 
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=${catalina.base}/logs/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout 
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ${catalina.base}/logs/error.log 
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n

發現問題:要第二天才會出現帶有日期的格式,當天的文件不帶有日期格式(測試手動修改機子時間)

另外,不足:log4j.properties較log4j.xml是有缺陷的,就是里面的日志等級可能都會輸出到一個文件中,高級別的日志信息也會在低級別的日志文件中出現,有點混亂。

 

 

踩雷到此其實就結束了。

補充:log4j在web.xml中的配置

way1:

<!-- webAppRootKey:值缺省為webapp.root,當tomcat下部署多個應用時(每個都用到了log4j),
每個應用的web.xml中都要配置該參數,該參數與Log4j.xml文件中的${webapp.root}
否則每個應用的webAppRootKey值都相同,就會引起沖突
-->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>

<!-- log4jConfigLocation:log4j配置文件存放路徑 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/conf/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

way2:

public void init() {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4jConfigLocation");
if (file != null) {
PropertyConfigurator.configure(prefix + file); 
}
}

====================================================================

<servlet>
<servlet-name>your servlet</servlet-name>

<servlet-class>your servelt class</servlet-class>
<init-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM