接手了一个老项目,用多了springboot,突然用spring的老项目,配置方面忘记的差不多了。记录一下,下面方便自查。
项目背景
Tomcat容器运行多个模块war包
spring框架
配置日志存放路径
假设项目名为iot,内部存在多个模块wpan、wpan1、wpan2等
File文件的路径配置方法:
1.使用绝对路径,把日志文件放到一个固定的位置,例如D:/logs/log.log。
2.使用环境变量:
配置 | 示例 | 说明 |
---|---|---|
${user.home} | ${user.home}/logs/log.log | 把日志文件放到个人用户zhangsan目录下 ${user.home}/logs/log.log代表C:\Users\zhangsan\logs\log.log。 |
${catalina.home} | ${catalina.home}/webapps/iot/logs/info.log | 把日志文件放到tomcat第一层目录下,${catalina.home}/webapps/iot/logs/error.log这样配置是为了把日志文件放到发布到tomcat下的项目内部。 |
${webApp.root} | ${webApp.root}/logs/info.log | 把日志文件放到发布到tomcat下的项目内部,${catalina.home}/webapps/iot/wpan/logs/info.log |
使用这个变量需要在web.xml中配置一些信息,配置如下,
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webApp.root</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
查找变量
项目模块wpan 中 log4j.properties配置内容
log4j.rootLogger= debug,stdout,infoLog,errorLog
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - %m%n
#error log config
log4j.appender.errorLog= org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorLog.File= ${wpan}/logs/error.log
log4j.appender.errorLog.Threshold = ERROR
log4j.appender.errorLog.layout= org.apache.log4j.PatternLayout
log4j.appender.errorLog.layout.ConversionPattern= %d{yyyy-MM-dd HH : mm:ss} %p [%c] - %m%n
#info log config
log4j.appender.infoLog= org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoLog.File= ${wpan}/logs/info.log
#log4j.appender.infoLog.DatePattern= yyyy-MM-dd'.log'
log4j.appender.infoLog.MaxFileSize=20MB
log4j.appender.infoLog.MaxBackupIndex=10
log4j.appender.infoLog.Threshold = DEBUG
log4j.appender.infoLog.layout= org.apache.log4j.PatternLayout
log4j.appender.infoLog.layout.ConversionPattern=%d{yyyy-MM-dd HH \: mm\:ss} %p [%c] - %m%n
从配置文件内容可知,日志的存放路径是由${wpan}变量来决定的。然后开始查找wpan是在哪里设置的。
通过查找web.xml,选择设置的 web app root 。
这里是把日志文件放到tomcat下的项目内部模块wpan 下
<!-- 用于打印日记 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>wpan</param-value>
</context-param>
老项目Tomcat部署发布选择自定义路径发布,而不是webapps这个默认的应用目录。
根据Tomcat启动日志,Set web app root system property 可知到具体的存放日志文件路径
11-Nov-2022 15:32:31.781 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina-webiot-wpan]
11-Nov-2022 15:32:31.781 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/8.5.73]
11-Nov-2022 15:32:31.831 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webiot-wpan/webiot-wpan.war]
11-Nov-2022 15:32:33.724 WARNING [localhost-startStop-1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [2.2]. Default version will be used.
11-Nov-2022 15:32:37.444 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
11-Nov-2022 15:32:37.455 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Set web app root system property: 'wpan' = [/usr/local/tomcat/webiot-wpan/webiot-wpan/]
11-Nov-2022 15:32:37.482 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing log4j from [classpath:config/log4j.properties]
11-Nov-2022 15:32:37.528 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
11-Nov-2022 15:32:40.913 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring FrameworkServlet 'springMVC'
11-Nov-2022 15:32:41.604 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webiot-wpan/webiot-wpan.war] has finished in [9,773] ms
11-Nov-2022 15:32:41.638 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webiot-wpan/ROOT]
11-Nov-2022 15:32:41.681 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webiot-wpan/ROOT] has finished in [43] ms
11-Nov-2022 15:32:41.685 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8200"]
总结:变量是在web.xml中定义。
源码追溯
Spring通过org.springframework.web.util.WebAppRootListener 这个监听器来监听运行时的项目路径,如果不定义webAppRootKey参数,那么webAppRootKey的值默认为"webapp.root"。
org.springframework.web.util.WebUtils
/** Default web app root key: "webapp.root" */
public static final String DEFAULT_WEB_APP_ROOT_KEY = "webapp.root";