Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
其实呢,我觉得他就是一个能对我们的WEB应用监控的组件,让我们可以了解到我们的程序运行的情况 ,以及出错后的相关记录。
我在用的时候报了一个错误
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [E:\soft\apache-tomcat-6.0.43-windows-x64\apache-tomcat-6.0.43\webapps\zhaiqq\] instead of [E:\soft\apache-tomcat-6.0.43-windows-x64\apache-tomcat-6.0.43\webapps\zhaiqq.myeclipse.bak\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files! at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:148) at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117) at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:802) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1068) at org.apache.catalina.core.StandardHost.start(StandardHost.java:822) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1060) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) at org.apache.catalina.core.StandardService.start(StandardService.java:525) at org.apache.catalina.core.StandardServer.start(StandardServer.java:759) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 2015-7-21 16:13:26 org.apache.catalina.core.ApplicationContext log
下面是log4j的配置:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=${catalina.home}/logs/zhaioms.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n #log4j.rootLogger=error,DAILY_FILE # DEBUG < INFO < WARN < ERROR < FATAL log4j.rootLogger=ERROR , DAILY_FILE , stdout #log4j.logger.org.apache.commons.digester=debug #log4j.logger.org.apache.commons.betwixt=debug # \u5e94\u7528\u4e8e\u6587\u4ef6\u56de\u6eda log4j.appender.ROLLFILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLFILE.Threshold=error log4j.appender.ROLLFILE.File=${catalina.home}/logs/zhaioms_roll.log log4j.appender.ROLLFILE.Append=true log4j.appender.ROLLFILE.MaxFileSize=10240KB log4j.appender.ROLLFILE.MaxBackupIndex=10 log4j.appender.ROLLFILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLFILE.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n # \u6bcf\u5929\u4ea7\u751f\u65e5\u5fd7 log4j.appender.DAILY_FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.DAILY_FILE.file=${catalina.home}/logs/zhaioms_daily.log log4j.appender.DAILY_FILE.DatePattern='.'yyyy-MM-dd log4j.appender.DAILY_FILE.Append=true log4j.appender.DAILY_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.DAILY_FILE.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n log4j.appender.DAILY_FILE.Threshold=error # \u663E\u793ASQL\u8BED\u53E5\u90E8\u5206 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG
发现没有什么问题啊,但是,请注意${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的项目。
webAppRootKey是在java web项目的web.xml配置文件中表示项目的唯一标示,在Eclipse调试Web项目时,项目的路径是一个临时路径,不在真正的路径下,可以通过log4j日志的方式打印出属性值,来看看临时项目路径在哪里,可以用System.getProperty("web.sample.root");如果web.xm 内没有设置webAppRootKey项,是为默认设置,那么webAppRootKey就是缺省的"webapp.root"。
然后我这样解决:按给的提示在web.xml里加上
### app1: <context-param> <param-name>webAppRootKey</param-name> <param-value>app1.root</param-value> </context-param> ### app2: <context-param> <param-name>webAppRootKey</param-name> <param-value>app2.root</param-value> </context-param>然后在 log4j.properties里就写成${myapp.root},只要这个名称不重复,就不会产生Web app root system property already set to different value的错误了。虽然正式使用时一台服务器部署多个应用程序的情况会比较少,但是还是保险起见吧,也对我们的程序相关的命名标准化吧,把${webapp.root}改成${[应用程序].root},这是个好习惯。
相关推荐
MAC 下 Web App to native app 的框架.zip,将Web应用程序捆绑到本机OS X应用程序
Appweb是一个嵌入式HTTP Web服务器,主要的设计思路是安全。这是直接集成到客户的应用和设备,便于开发和部署基于Web的应用程序和设备。它迅速( 每秒处理3500多要求)而紧凑 ,其中包括支持动态网页制作,服务器端...
appweb 嵌入式的web服务器 ,占用的内存空间只有800kb。
SystemProperty-Setting-APP Environment: Android Studio / Android 5.0 Description: This app is the system app, which need to be build in android framework or be signed. And this app is the example ...
Beginning Django Web App Dev with Python Beginning Django Web App Dev with Python
appweb4.3.4-0添加arm配置及源代码,有相关说明文件
J2EE web app 3.1 xsd
Office Web App Server 2013 Installation guide
开放时代从Web_Page到Web_App
Office web app server2013 安装与部署
Appweb开Appweb开发指南发指南Appweb开发指南Appweb开发指南Appweb开发指南
Web App 开发超入门资料
这是我在appweb和esp源代码的基础上编译遇到文章中所述的问题,修改了一些地方解决问题的appweb和esp源码
修改源码让APP获取root权限可以执行su命令的git diff记录
web-app_2_4.xsd
Android WebView 报 Not allowed to load local resource错误的解决办法 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/76228541
solaredge-web-set-app背景支持SolarEdge SetApp的逆变器具有用于调试的集成Web服务器,该服务器还提供状态信息。 该前端主要包含在JavaScript程序中。 如果运行以下命令,将会看到您拥有哪个版本JavaScript程序: ...
web和App测试的区别!web和App测试的区别!web和App测试的区别!web和App测试的区别
利用app_process实现免root调用shell_Java_下载.zip
When was the last time you visited an app’s mobile web site rather than its native app counterpart? Was it an enjoyable experience? What did you like about it? What could have been better? Possibly ...