深刻淺析java web log4j 設置裝備擺設及在web項目中設置裝備擺設Log4j的技能。本站提示廣大學習愛好者:(深刻淺析java web log4j 設置裝備擺設及在web項目中設置裝備擺設Log4j的技能)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻淺析java web log4j 設置裝備擺設及在web項目中設置裝備擺設Log4j的技能正文
在上篇文章給年夜家引見了Java log4j具體教程,本文給年夜家引見java web log4j設置裝備擺設及web項目中設置裝備擺設log4j的技能。詳細概況請看下文吧。
起首給年夜家供給log4j.jar下載:http://logging.apache.org/log4j/1.2/download.html
1、java web項目應用log4j
1.在web.xml文件中添加
<!-- 設置裝備擺設log4j --> <context-param> <param-name>webAppRootKey</param-name> <param-value>com.hsinghsu.testSSH.webapp.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>600000</param-value> </context-param>
2.添加log4j.properties文件
log4j.rootCategory=INFO, stdout , R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender #log4j.appender.R.File=e:\\test\\avatar.log ## linux logs file path #log4j.appender.R.File=${com.hsinghsu.testSSH.webapp.root}/log/testlog.log ## Windows logs file path log4j.appender.R.File=D:\\eclipsespace\\testSSH\\WebContent\\WEB-INF\\testlog.log log4j.appender.R.layout=org.apache.log4j.PatternLayout #log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n #log4j.logger.com.neusoft=DEBUG #log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=INFO #log4j.logger.org.apache.commons=ERROR #log4j.logger.org.apache.struts=WARN #log4j.logger.org.displaytag=ERROR # log4j.logger.org.springframework=INFO # #log4j.logger.com.ibatis.db=WARN #log4j.logger.org.apache.velocity=FATAL #log4j.logger.com.canoo.webtest=WARN #log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN #log4j.logger.org.hibernate=DEBUG log4j.logger.org.hibernate=INFO #log4j.logger.org.logicalcobwebs=WARN
3.應用log4j
例如在UserServiceImpl.java中應用log4j。
package com.hsinghsu.testSSH.service.impl; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hsinghsu.testSSH.dao.UserDao; import com.hsinghsu.testSSH.model.User; import com.hsinghsu.testSSH.service.UserService; @Service(value = "userService") public class UserServiceImpl implements UserService{ @Autowired private UserDao userDao; // private final static Logger logger = Logger.getLogger(UserServiceImpl.class); private Logger logger = Logger.getLogger(this.getClass().getName()); public boolean login(String name, String password) { logger.info("--UserServiceImpl login method name:"+name+" password:"+password); User user = userDao.getUserByName(name); if(user!=null) { if(password.equals(user.getPwd())) { return true; } } return false; } }
2、log4j.properties參數詳解
log的級別分為debug(調試信息)、info(普通信息)、warn(正告信息)、error(毛病信息)、fatal(致命毛病信息)。
Log4j支撐兩種設置裝備擺設文件格局,一種是XML格局的文件,一種是java屬性文件log4j.properties,上面以log4j.properties為例停止解釋。
1、設置裝備擺設根Logger
Logger 擔任處置日記記載的年夜部門操作,其語法為:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
level : 是日記記載的優先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或許您界說的級別。
appenderName:就是指定日記信息輸入目標地的稱號。
如:log4j.rootLogger=info,A1,B2,C3
在晚期log4j版本中,org.apache.Category完成了記載器的功效,後應用logger擴大了Category類,是以log4j.rootCategory也能夠應用。
如:log4j.rootCategory=INFO,A1,A2
2、設置裝備擺設日記信息輸入目標地 Appender
Appender 擔任掌握日記記載操作的輸入,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
個中"fully.qualified.name.of.appender.class" 有以下幾種:
i.org.apache.log4j.ConsoleAppender(掌握台)
該選項有以下幾種:
Threshold=WARN:指定日記新聞的輸入最低條理。
ImmediateFlush=true:默許值是true,意謂著一切的新聞都邑被立刻輸入。
Target=System.err:默許情形下是:System.out,指定輸入掌握台
ii.org.apache.log4j.FileAppender(文件)
該選項有以下幾種:
Threshold=WARN:指定日記新聞的輸入最低條理。
ImmediateFlush=true:默許值是true,意謂著一切的新聞都邑被立刻輸入。
File=mylog.txt:指定新聞輸入到mylog.txt文件。
Append=false:默許值是true,行將新聞增長到指定文件中,false指將新聞籠罩指定的文件內容。
iii.org.apache.log4j.DailyRollingFileAppender(天天發生一個日記文件)
該選項有以下幾種:
Threshold=WARN:指定日記新聞的輸入最低條理。
ImmediateFlush=true:默許值是true,意謂著一切的新聞都邑被立刻輸入。
File=a.log:指定新聞輸入到a.log文件,默許是從web辦事器的根途徑開端。
Append=false:默許值是true,行將新聞增長到指定文件中,false指將新聞籠罩指定的文件內容。
DatePattern='.'yyyy-ww:每周轉動一次文件,即每周發生一個新的文件。固然也能夠指定按月、周、天、時和分。即對應的格局以下:
'.'yyyy-MM: 每個月
'.'yyyy-ww: 每周
'.'yyyy-MM-dd: 天天
'.'yyyy-MM-dd-a: 天天兩次
'.'yyyy-MM-dd-HH: 每小時
'.'yyyy-MM-dd-HH-mm: 每分鐘
iv.org.apache.log4j.RollingFileAppender(文件年夜小達到指定尺寸的時刻發生一個新的文件,可經由過程log4j.appender.appenderName.MaxFileSize=100KB設置文件年夜小)
該選項有以下幾種:
Threshold=WARN:指定日記新聞的輸入最低條理。
ImmediateFlush=true:默許值是true,意謂著一切的新聞都邑被立刻輸入。
File=a.log:指定新聞輸入到a.log文件,默許是從web辦事器的根途徑開端。
Append=false:默許值是true,行將新聞增長到指定文件中,false指將新聞籠罩指定的文件內容。
MaxFileSize=100KB: 後綴可所以KB, MB 或許是 GB. 在日記文件達到該年夜小時,將會主動轉動,行將本來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以發生的轉動文件的最年夜數。
v.org.apache.log4j.WriterAppender(將日記信息以流格局發送就任意指定的處所)
例如:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\eclipsespace\\testSSH\\WebContent\\WEB-INF\\testlog.log
3、設置裝備擺設日記信息的格局(結構)Layout
Layout 擔任格局化Appender的輸入,其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
個中"fully.qualified.name.of.layout.class" 有以下幾種:
i.org.apache.log4j.HTMLLayout(以HTML表格情勢結構)
該選項有以下幾種:
LocationInfo=true:默許值是false,輸入java文件稱號和行號
Title=my app file: 默許值是 Log4J Log Messages.
ii.org.apache.log4j.PatternLayout(可以靈巧地指定結構形式)
該選項有以下幾種:
ConversionPattern=%m%n :指定如何格局化指定的新聞
個中%m%n等符號所代表的寄義以下:
-X號: X信息輸入時左對齊;
%p: 輸入日記信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸入日記時光點的日期或時光,默許格局為ISO8601,也能夠在厥後指定格局,好比:%d{yyy MMM dd HH:mm:ss,SSS},輸入相似:2002年10月18日 22:10:28,921
%r: 輸入自運用啟動到輸入該log信息消耗的毫秒數
%c: 輸入日記信息所屬的類目,平日就是地點類的全名
%t: 輸入發生該日記事宜的線程名
%l: 輸入日記事宜的產生地位,相當於%C.%M(%F:%L)的組合,包含類目名、產生的線程,和在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
%x: 輸入和以後線程相干聯的NDC(嵌套診斷情況),特別用到像java servlets如許的多客戶多線程的運用中。
%%: 輸入一個"%"字符
%F: 輸入日記新聞發生時地點的文件稱號
%L: 輸入代碼中的行號
%m: 輸入代碼中指定的新聞,發生的日記詳細信息
%n: 輸入一個回車換行符,Windows平台為"\r\n",Unix平台為"\n"輸入日記信息換行
可以在%與形式字符之間加上潤飾符來掌握其最小寬度、最年夜寬度、和文本的對齊方法。如:
%20c:指定輸入category的稱號,最小的寬度是20,假如category的稱號小於20的話,默許的情形下右對齊。
%-20c:指定輸入category的稱號,最小的寬度是20,假如category的稱號小於20的話,"-"號指定左對齊。
%.30c:指定輸入category的稱號,最年夜的寬度是30,假如category的稱號年夜於30的話,就會將右邊多出的字符截失落,但小於30的話也不會有空格。
%20.30c:假如category的稱號小於20就補空格,而且右對齊,假如其稱號擅長30字符,就從右邊交遠銷出的字符截失落。
如:%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
[TEST] %p [%t] %C.%M(%L) | %m%n
iii.org.apache.log4j.SimpleLayout(包括日記信息的級別和信息字符串)
iv.org.apache.log4j.TTCCLayout(包括日記發生的時光、線程、種別等等信息)
4.其他
log4j.logger.com. neusoft =DEBUG
指定com.neusoft包下的一切類的品級為DEBUG。
log4j.logger.com.opensymphony.oscache=ERROR
log4j.logger.net.sf.navigator=ERROR
這兩句是把這兩個包下湧現的毛病的品級設為ERROR,假如項目中沒有設置裝備擺設EHCache,則不須要這兩句。
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
這兩句是struts的包。
log4j.logger.org.displaytag=ERROR
這句是displaytag的包。(QC成績列表頁面所用)
log4j.logger.org.springframework=DEBUG
此句為Spring的包。
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG
此兩句是hibernate的包。
3、將log寫入多個文件中。
log4j設置裝備擺設:
log4j.rootCategory=INFO,stdout
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,SSS}[ColorClouds] %p [%t] %C.%M(%L) | %m%n
log4j.logger.net.sf.navigator=INFO
log4j.logger.org.springframework=INFO
log4j.logger.runLogger= INFO,R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=G:\\log\\runLog.log
log4j.appender.R.MaxFileSize=51200KB
#log4j.appender.R.File=${com.huawei.icity.webapp.root}/log/icity.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}[ColorClouds Run] %p [%t] %C.%M(%L) | %m%n
#log4j.logger.businessLogger= INFO,B
#log4j.appender.B=org.apache.log4j.RollingFileAppender
#log4j.appender.B.File=G:\\log\\businessLog.log
#log4j.appender.B.MaxFileSize=51200KB
#log4j.appender.B.layout=org.apache.log4j.PatternLayout
#log4j.appender.B.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}[ColorClouds Business] %p [%t] %C.%M(%L) | %m%n
log4j.logger.interfaceLogger= INFO,I
log4j.appender.I=org.apache.log4j.RollingFileAppender
log4j.appender.I.File=G:\\log\\interfaceLog.log
log4j.appender.I.MaxFileSize=51200KB
log4j.appender.I.layout=org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}[ColorClouds Interface] %p [%t] %C.%M(%L) | %m%n
java挪用:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class QueryMyMeetingAction extends BaseFlowAction { /** * uid */ private static final long serialVersionUID = 7612831197603586815L; private static Log runLog = LogFactory.getLog("runLogger");//運轉日記 private static Log interfaceLog = LogFactory.getLog("interfaceLogger");//接口日記 public String execute() throws Exception { interfaceLog.info("====>>要求"); runLog.info("要求02" ); return super.execute(); } }
上面給年夜家引見在Web項目中設置裝備擺設Log4j的辦法
1. 靜態的轉變記載級別和戰略,不須要重啟Web運用,如《Effective Enterprise Java》所說。
2. 把log文件定在 /WEB-INF/logs/ 而不須要寫相對途徑。
3. 可以把log4j.properties和其他properties一路放在/WEB-INF/ ,而不是Class-Path。
在web.xml 添加
<!--假如不界說webAppRootKey參數,那末webAppRootKey就是缺省的"webapp.root"-->
<context-param> <param-name>webAppRootKey</param-name> <param-value>xxx.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
在上文的設置裝備擺設裡,Log4jConfigListener會去WEB-INF/log4j.propeties 讀取設置裝備擺設文件;
開一條watchdog線程每60秒掃描一下設置裝備擺設文件的變更;
並把web目次的途徑壓入一個叫webapp.root的體系變量。
然後,在log4j.properties 裡便可以如許界說logfile地位
log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log
假如有多個web運用,怕webapp.root變量反復,可以在context-param裡界說webAppRootKey。
以上所述就是本文關於深刻淺析java web log4j 設置裝備擺設及在web項目中設置裝備擺設Log4j的技能,願望對年夜家進修java web log4j相干常識有所贊助。