com.dreamsover.report.assessManage.bs.impl.AssessBsImpl.addAssess=\u6DFB\u52A0\u6BCF\u6708\u5BA1\u6838\u4FE1\u606F com.dreamsover.report.assessManage.bs.impl.AssessBsImpl.getLineAssesssThisMonth=\u67E5\u8BE2\u672C\u6708\u6240\u6709\u5BA1\u6838\u60C5\u51B5 com.dreamsover.report.checkManage.bs.impl.CheckBsImpl.addCheck=\u6DFB\u52A0\u672C\u6708\u68C0\u67E5\u62A5\u8868 bringspring.action.user.LoginAction.login=\u767B\u5F55\u7CFB\u7EDF bringspring.action.user.LoginAction.logout=\u9000\u51FA\u7CFB\u7EDF bringspring.action.rlzy.dictionary.SystemdictionaryAction.syslist=\u83B7\u53D6\u7CFB\u7EDF\u5217\u8868 bringspring.action.rlzy.dictionary.SystemdictionaryAction.sysupdatepage=\u4FEE\u6539\u7CFB\u7EDF\u914D\u7F6E\u9875 bringspring.action.rlzy.dictionary.SystemdictionaryAction.sysupdate=\u4FEE\u6539\u7CFB\u7EDF\u914D\u7F6E bringspring.action.rlzy.dictionary.SystemdictionaryAction.syssavepage=\u4FDD\u5B58\u7CFB\u7EDF\u914D\u7F6E\u9875 bringspring.action.rlzy.dictionary.SystemdictionaryAction.syssave=\u4FDD\u5B58\u7CFB\u7EDF\u914D\u7F6E bringspring.action.rlzy.dictionary.SystemdictionaryAction.sysdellist=\u5220\u9664\u7CFB\u7EDF\u914D\u7F6E #main log4j.properties log4j.rootLogger=INFO,fileout,db log4j.logger.org.apache.struts=ERROR log4j.logger.org.apache.commons=ERROR log4j.logger.org.hibernate=ERROR log4j.logger.org.springframework=ERROR log4j.logger.com.opensymphony=ERROR #Filelogfile log4j.appender.fileout=org.apache.log4j.RollingFileAppender log4j.appender.fileout.File=${jxsh.root}/WEB-INF/jxsh.log log4j.appender.fileout.MaxFileSize=512KB log4j.appender.fileout.MaxBackupIndex=3 log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %X{id},%X{name},[\u7528\u6237\:%X{username}],[\u7528\u6237\u767B\u5F55IP\:%X{userip}],[\u7528\u6237\u64CD\u4F5C\:%m] %C%l%n #JDBC Appender log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender log4j.appender.db.BufferSize=1 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver log4j.appender.db.URL=jdbc:oracle:thin:@localhost:1521:orcl log4j.appender.db.user=jxsh log4j.appender.db.password=jxsh log4j.appender.db.sql = INSERT INTO log(ID,USERID,USERNAME,USERREALNAME,USERIP,logDATE,logTIME,LOGThread,loglevel,logClass,logLogger,logMessage) values (LOG_ID.NEXTVAL,'%X{id}','%X{name}','%X{username}','%X{userip}','%d{yyyy-MM-dd}','%d{HH\:mm\:ss}','%t', '%p', '%c', '%l', '%m') log4j.appender.db.layout=org.apache.log4j.PatternLayout 日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項目Log4j是一個功能強大的日志組件,提供方便的日志記錄。以下是個人經(jīng)驗,具體請參考Log4j文檔指南。 Log4j下載 在apache網(wǎng)站:jakarta.apache.org/log4j 可以免費下載到Log4j最新版本的軟件包。 Log4j使用 Log4j的包下載完成后,解壓,將其中打包好的的log4j-1.x.x.jar導(dǎo)入你的工程LIB中。 Log4j之所以受歡迎的原因之一是它的靈活性。Log4j提供了靈活的配置方法,默認是調(diào)用BasicConfigurator.configure()來進行配置,但如果只是簡單的調(diào)用BasicConfigurator.configure()來進行配置工作,那么所有的配置都是固定的,不方便以后修改配置。另一種是動態(tài)配置,Log4j提供了PropertyConfigurator.configure(……)來動態(tài)配置,參數(shù)可以是一個properties文件所在路徑的String對象,可以是一個properties文件所在路徑的URL對象,也可以是一個properties對象。如果要用XML文件來配置信息,則可用類型的DOMConfigurator()函數(shù)來從一個XML文件中加載配置信息。這種方式更方便修改配置。 動態(tài)配置 java 代碼 package http; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.xml.DOMConfigurator; public class Log4jDemo { static Logger log = Logger.getLogger(Log4jDemo.class.getClass()); /** * main * @param args */ public static void main(String[] args) { BasicConfigurator.configure();//默認配置 PropertyConfigurator.configure("c:/log4j.properties"); //動態(tài)配置,參數(shù)可以是一個properties文件所在路徑的String對象 //可以是一個properties文件所在路徑的URL對象,也可以是一個properties對象 DOMConfigurator.configure("c:/log4j.xml");//XML配置文件 //PropertyConfigurator.configure()的參數(shù)還可以是XML、Properties對象 //下面就可使用log4j log.info("info"); log.debug("debug"); log.error("error"); log.warn("warn"); } } J2EE應(yīng)用log4j 上面代碼描述了Log4j的簡單應(yīng)用,其實使用Log4j也就是這樣簡單方便。當(dāng)然除了上面的配置方法,還有其它,比如做一個J2EE應(yīng)用,在J2EE應(yīng)用使用Log4j,必須先在啟動服務(wù)時加載Log4j的配置文件進行初始化,可以在web.xml中進行。 java 代碼 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class J2eeLog4jDemo extends HttpServlet { public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void init() throws ServletException { //通過web.xml來動態(tài)取得配置文件 String prefix = getServletContext().getRealPath("/"); String file = getInitParameter("log4j"); //如果沒有給出相應(yīng)的配置文件,則不進行初始化 if(file != null) { PropertyConfigurator.configure(prefix+file); } } } Web.xml 代碼 <servlet> <servlet-name>j2eelog4jdemoservlet-name> <servlet-class>J2eeLog4jDemoservlet-class> <init-param> <param-name>log4jparam-name> <param-value>log4j.propertiesparam-value> init-param> <load-on-startup>1load-on-startup> //設(shè)為1時,Web容器啟動即進行加載 servlet> 使用Spring啟動Log4j,在系統(tǒng)啟動時運行 在web.xml中加入如下代碼 <!--由Sprng載入的Log4j配置文件位置--> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <!--Spring默認刷新Log4j配置文件的間隔,單位為millisecond--> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!--Spring log4j 監(jiān)聽器--> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> 同時使用commons-logging和Log4j 1)首先在classpath下尋找自己的配置文件commons-logging.properties,如果找到,則使用其中定義的Log實現(xiàn)類 2)如果找不到commons-logging.properties文件,則在查找是否已定義系統(tǒng)環(huán)境變量org.apache.commons.logging.Log,找到則使用其定義的Log實現(xiàn)類 3)否則,查看classpath中是否有Log4j的包,如果發(fā)現(xiàn),則自動使用Log4j作為日志實現(xiàn)類 4)否則,使用JDK自身的日志實現(xiàn)類(JDK1.4以后才有日志實現(xiàn)類) 5)否則,使用commons-logging自己提供的一個簡單的日志實現(xiàn)類SimpleLog 將commons-logging和Log4j的jar包都放置到classpath下,同時也將Log4j的配置文件放到classpath中,兩者就可以很好的合作,實現(xiàn)如下: package com.doctorcom.model; import org.apache.commons.logging.Log; public class LogFactorySupport { public Log getLog(){ Log log = org.apache.commons.logging.LogFactory.getLog(LogFactorySupport.class); log.info(""); log.debug(""); } } java 代碼 Log4j配置內(nèi)容 看一個簡單的java屬性配置文件log4j.properties: properties 代碼 #指定根Logger,及日志輸出級別,大于等于該級別的日志將被輸出( DEBUG < inFO < WARN < ERROR < FATAL ) 設(shè)為OFF可以關(guān)閉日志 log4j.rootLogger=DEBUG, A1,A2 #指定log輸出目的,這里設(shè)為輸出日志到指定目錄的文件my.log中 log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.File=\\logs\\my.log #當(dāng)前根目錄下 #指定日志信息的格式 log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n #把A2輸出到控制臺 log4j.appender.A2=org.apache.log4j.ConsoleAppender log4j.appender.A2.layout=org.apache.log4j.SimpleLayout #還可以單獨指定輸出某個包的日志級別 #log4j.logger.com.study.HelloLog4j=INFO 1、配置根Logger,其語法為: log4j.rootLogger = [ level ] , appenderName, appenderName2 level:日志的級別,指定這條日志信息的重要性。分為ALL < DEBUG < INFO < WARN 一般常用的為 DEBUG , INFO ,WARN ,ERROR四種,分別對應(yīng)Logger類的四種方法 debug(Object message ) ; info(Object message ) ; warn(Object message ) ; error(Object message ) ; 如果設(shè)置級別為INFO,則優(yōu)先級大于等于INFO級別(如:INFO、WARN、ERROR)的日志信息將可以被輸出,小于該級別的如:DEBUG將不會被輸出 appenderName :就是指定日志信息輸出目的地,比如(打印到控制臺,輸出到文件等)。同一條日志信息可以配置多個輸出目的地。 2、配置log輸出目的地 Log4j提供以下幾種: org.apache.log4j.ConsoleAppender(控制臺) org.apache.log4j.FileAppender(文件) org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件) org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件) org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方) 3、log信息的格式 org.apache.log4j.HTMLLayout(HTML表格形式) org.apache.log4j.SimpleLayout(簡單格式的日志,只包括日志信息的級別和指定的信息字符串 ,如:DEBUG - Hello) org.apache.log4j.TTCCLayout(日志的格式包括日志產(chǎn)生的時間、線程、類別等等信息) org.apache.log4j.PatternLayout(靈活地自定義日志格式) 當(dāng)使用org.apache.log4j.PatternLayout來自定義信息格式時,可以使用 log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 來格式化信息 %c 輸出所屬類的全名,可寫為 %c{Num} ,Num類名輸出的范圍 如:"com.sun.aaa.classB", %C{2}將使日志輸出輸出范圍為:aaa.classB %d 輸出日志時間其格式為 可指定格式 如 %d{HH:mm:ss}等 %l 輸出日志事件發(fā)生位置,包括類目名、發(fā)生線程,在代碼中的行數(shù) %n 換行符 %m 輸出代碼指定信息,如info(“message”),輸出message %p 輸出日志的優(yōu)先級,即 FATAL ,ERROR 等 %r 輸出從啟動到顯示該條日志信息所耗費的時間(毫秒數(shù)) %t 輸出產(chǎn)生該日志事件的線程名 12 log4j.logger.com. neusoft =DEBUG 指定com.neusoft包下的所有類的等級為DEBUG。 可以把com.neusoft改為自己項目所用的包名。 log4j-一、Log4j配置 第一步:加入log4j-1.2.8.jar到lib下。 第二步:在CLASSPATH下建立log4j.properties。內(nèi)容如下: 1 log4j.rootCategory=INFO, stdout , R 2 3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 log4j.appender.stdout.layout.ConversionPattern=【QC】 %p 【%t】 %C.%M(%L) | %m%n 6 7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 8 log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log 9 log4j.appender.R.layout=org.apache.log4j.PatternLayout 10 log4j.appender.R.layout.ConversionPattern=%d-【TS】 %p %t %c - %m%n 11 12 log4j.logger.com.neusoft=DEBUG 13 log4j.logger.com.opensymphony.oscache=ERROR 14 log4j.logger.net.sf.navigator=ERROR 15 log4j.logger.org.apache.commons=ERROR 16 log4j.logger.org.apache.struts=WARN 17 log4j.logger.org.displaytag=ERROR 18 log4j.logger.org.springframework=DEBUG 19 log4j.logger.com.ibatis.db=WARN 20 log4j.logger.org.apache.velocity=FATAL 21 22 log4j.logger.com.canoo.webtest=WARN 23 24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN 25 log4j.logger.org.hibernate=DEBUG 26 log4j.logger.org.logicalcobwebs=WARN 第三步:相應(yīng)的修改其中屬性,修改之前就必須知道這些都是干什么的,在第二部分講解。 第四步:在要輸出日志的類中加入相關(guān)語句: 定義屬性:protected final Log log = LogFactory.getLog(getClass()); 在相應(yīng)的方法中: if (log.isDebugEnabled()) { log.debug(“System …..”); } log4j-二、Log4j說明 1 log4j.rootCategory=INFO, stdout , R 此句為將等級為INFO的日志信息輸出到stdout和R這兩個目的地,stdout和R的定義在下面的代碼,可以任意起名。等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF則不打出任何信息,如果配置為INFO這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示,具體講解可參照第三部分定義配置文件中的logger。 3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 此句為定義名為stdout的輸出端是哪種類型,可以是 org.apache.log4j.ConsoleAppender(控制臺), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件), org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件) org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方) 具體講解可參照第三部分定義配置文件中的Appender。 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 此句為定義名為stdout的輸出端的layout是哪種類型,可以是 org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以靈活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串), org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息) 具體講解可參照第三部分定義配置文件中的Layout。 5 log4j.appender.stdout.layout.ConversionPattern= 【QC】 %p 【%t】 %C.%M(%L) | %m%n 如果使用pattern布局就要指定的打印信息的具體格式ConversionPattern,打印參數(shù)如下: %m 輸出代碼中指定的消息 %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL %r 輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù) %c 輸出所屬的類目,通常就是所在類的全名 %t 輸出產(chǎn)生該日志事件的線程名 %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n” %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。 【QC】是log信息的開頭,可以為任意字符,一般為項目簡稱。 輸出的信息 【TS】 DEBUG 【main】 AbstractBeanFactory.getBean(189) | Returning cached instance of singleton bean 'MyAutoProxy' 具體講解可參照第三部分定義配置文件中的格式化日志信息。 7 log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 此句與第3行一樣。定義名為R的輸出端的類型為每天產(chǎn)生一個日志文件。 8 log4j.appender.R.File=D:\\Tomcat 5.5\\logs\\qc.log 此句為定義名為R的輸出端的文件名為D:\\Tomcat 5.5\\logs\\qc.log 可以自行修改。 9 log4j.appender.R.layout=org.apache.log4j.PatternLayout 與第4行相同。 10 log4j.appender.R.layout.ConversionPattern=%d-【TS】 %p %t %c - %m%n 與第5行相同。 12 log4j.logger.com. neusoft =DEBUG 指定com.neusoft包下的所有類的等級為DEBUG。 可以把com.neusoft改為自己項目所用的包名。 13 log4j.logger.com.opensymphony.oscache=ERROR 14 log4j.logger.net.sf.navigator=ERROR 這兩句是把這兩個包下出現(xiàn)的錯誤的等級設(shè)為ERROR,如果項目中沒有配置EHCache,則不需要這兩句。 15 log4j.logger.org.apache.commons=ERROR 16 log4j.logger.org.apache.struts=WARN 這兩句是struts的包。 17 log4j.logger.org.displaytag=ERROR 這句是displaytag的包。(QC問題列表頁面所用) 18 log4j.logger.org.springframework=DEBUG 此句為Spring的包。 24 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN 25 log4j.logger.org.hibernate=DEBUG 此兩句是hibernate的包。 以上這些包的設(shè)置可根據(jù)項目的實際情況而自行定制。 log4j-三、log4j詳解 1、定義配置文件 Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件log4j.properties(鍵=值)。下面將介紹使用log4j.properties文件作為配置文件的方法: ①、配置根Logger Logger 負責(zé)處理日志記錄的大部分操作。 其語法為: log4j.rootLogger = 【 level 】 , appenderName, appenderName, … 其中,level 是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別。Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定義了INFO級別,只有等于及高于這個級別的才進行處理,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。ALL:打印所有的日志,OFF:關(guān)閉所有的日志輸出。 appenderName就是指定日志信息輸出到哪個地方??赏瑫r指定多個輸出目的地。 ②、配置日志信息輸出目的地 Appender Appender 負責(zé)控制日志記錄操作的輸出。 其語法為: log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.optionN = valueN 這里的appenderName為在①里定義的,可任意起名。 其中,Log4j提供的appender有以下幾種: org.apache.log4j.ConsoleAppender(控制臺), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件), org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件),可通過log4j.appender.R.MaxFileSize=100KB設(shè)置文件大小,還可通過log4j.appender.R.MaxBackupIndex=1設(shè)置為保存一個備份文件。 org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方) 例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender 定義一個名為stdout的輸出目的地,ConsoleAppender為控制臺。 ③、配置日志信息的格式(布局)Layout Layout 負責(zé)格式化Appender的輸出。 其語法為: log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.optionN = valueN 其中,Log4j提供的layout有以下幾種: org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以靈活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串), org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息) 2、格式化日志信息 Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下: %m 輸出代碼中指定的消息 %p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL %r 輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù) %c 輸出所屬的類目,通常就是所在類的全名 %t 輸出產(chǎn)生該日志事件的線程名 %n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n” %d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。 3、在代碼中使用Log4j 我們在需要輸出日志信息的類中做如下的三個工作: 1、導(dǎo)入所有需的commongs-logging類: import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 2、在自己的類中定義一個org.apache.commons.logging.Log類的私有靜態(tài)類成員: private final Log log = LogFactory.getLog(getClass()); LogFactory.getLog()方法的參數(shù)使用的是當(dāng)前類的class。 3、使用org.apache.commons.logging.Log類的成員方法輸出日志信息: if (log.isDebugEnabled()) { log.debug("111"); } if (log.isInfoEnabled()) { log.info("222"); } if (log.isWarnEnabled()) { log.warn("333"); } if (log.isErrorEnabled()) { log.error("444"); } if (log.isFatalEnabled()) { log.fatal("555") } |
|