日志的配置,有两个参数,第一个参数:log4jConfigLocation 值:classpath:log4j.properties
第二个参数:webAppRootKey 值:SMBMS-NEW.root
不明白这两个参数怎么来的怎么就要配置,下面满足自己的好奇,到底该如何查看源码,重点是为了培养“语感”
首先点进去
org.springframework.web.util.Log4jConfigListener
发现有初始化字样的参数initLogging ,所以猜测与它有关(因为web.xml配置的大多数就是为了初始化)再点进initLogging方法中
发现了第一个参数log4jConfigLocation 而这个是通过servletContext 中文翻译为servlet的上下文,其实就是包含的内容,用包含内容的servletContext得到参数值
点进setAppRootSystemProperty(servletContext)方法
发现这是得到真的路径,
第二个说如果没设置这个参数就默认webapp.root
第三个说用自己写的或者系统默认给的目录做key,而真正的根目录是root 既可以用这个key得到root,所以我们第二参数写不写都行或者随便写,但是最好要遵循规范,体现我们的专业性
所以我们通过阅读源码知道了这两个参数的作用!
补充:1、 web.xml配置
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
"webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。
可以用System.getProperty("webapp.root")来动态获项目的运行路径。
一般返回结果例如:/usr/local/tomcat6/webapps/项目名
2、解决以下报错
部署在同一容器中的Web项目,要配置不同的<param-value>,不能重复,否则报类似下面的错误:
Web app root system property already set to different value: 'webapp.root' = [/home/user/tomcat/webapps/project1/] instead of [/home/user/tomcat/webapps/project2/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
意思是“webapp.root”这个key已经指向了项目1,不可以再指向项目2
原文参考:http://elf8848.iteye.com/blog/2008595