Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制台、文件、GUI組件、甚至是套接口 服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就 是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
其實呢,我覺得他就是一個能對我們的WEB應用監控的組件,讓我們可以了解到我們的程序運行的情況 ,以及出錯后的相關記錄。
我在用的時候報了一個錯誤
- 嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
- java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [D:\MyEclipseProject\.metadata\.me_tcat\webapps\ReservationSystem\] instead of [D:\MyEclipseProject\.metadata\.me_tcat\webapps\SpringMVCDemo\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
我們來看一下Log4j的配置:
- log4j.rootLogger=INFO, stdout, logfile
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.HTMLLayout
- #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
- log4j.appender.stdout.layout.ConversionPattern=- %m%n
- log4j.appender.logfile=org.apache.log4j.RollingFileAppender
- log4j.appender.logfile.File=${webapp.root}/webapp.html
- log4j.appender.logfile.MaxFileSize=512KB
- # Keep three backup files.
- log4j.appender.logfile.MaxBackupIndex=3
- # Pattern to output: date priority [category] - message
- log4j.appender.logfile.layout=org.apache.log4j.HTMLLayout
- log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
- log4j.logger.com.opensymphony.xwork2=ERROR
- # Control logging for other open source packages
- log4j.logger.org.springframework=ERROR
- log4j.logger.org.quartz=ERROR
- log4j.logger.net.sf.ehcache=ERROR
- log4j.logger.net.sf.navigator=ERROR
- log4j.logger.org.apache.commons=ERROR
- log4j.logger.org.apache.struts=ERROR
- log4j.logger.org.hibernate=DEBUG
- # Struts OgnlUtil issues unimportant warnings
- log4j.logger.com.opensymphony.xwork2.util.OgnlUtil=error
- log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack=error
發現沒有什么問題啊,但是,請注意${webapp.root}這個變量 ,對照着錯誤提示大概看了一下,意思是說Web應用程序根系統屬性已經被設置,說白了就是說'webapp.root' 這個配置名稱已經被使用了,不能再用這個了,
並且也提示了Choose unique values for the 'webAppRootKey' context-param in your web.xml files ,也就是說我們可以在web.xml里配置一個唯一的'webAppRootKey' ,這樣就不會沖突了。
這個問題會出現在一個WEB服務器同時部署多個使用了Log4j的應用上,如果配置不當,出這個錯誤還真會讓你郁悶到抓狂。我就是出這個問題了,一個Tomcat部署了2個使用了Log4j的項目。
然后我這樣解決:按給的提示在web.xml里加上
- <context-param>
- <param-name>webAppRootKey</param-name>
- <param-value>myapp.root</param-value>
- </context-param>
然后在 log4j.properties里就寫成${myapp.root},只要這個名稱不重復,就不會產生Web app root system property already set to different value的錯誤了。雖然正式使用時一台服務器部署多個應用程序的情況會比較少,但是還是保險起見吧,也對我們的程序相關的命名標准化吧,把
${webapp.root}改成${[應用程序].root},這是個好習慣。

