Log4j配置日志存放路径

接手了一个老项目,用多了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";

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值