log4j日志文件的相对路径

一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇到.算是比较完美的解决.

先说场景:

一个web项目,使用log4j做日志系统.开发时web容器为jetty,生产环境为tomcat5.5.

classes下定义了log4j.properties.

log4j.appender.A2=org.apache.log4j.RollingFileAppender

log4j.appender.A2.File=${dir}/logs/report.log

 一般,自定义dir,可以在System中设置dir的值.

如果不是使用java -Ddir=xxx这样方式,就需要在加载log4j.properties之前设置.

一般用Listener,在Listener的init方法中设置.

这种方式在jetty中可行.在tomcat中失败.

这是因为tomcat在启动项目时,会优先加载log4j.properties文件,然后才执行Listener.

突然想到,tomcat在启动项目时,会自动设置环境变量:catalina.base

修改一下

log4j.appender.A2.File=${catalina.base}/logs/report.log

  然后在Listener中判断此变量是否存在,存在,表示在tomcat中,不需要再设置,否则,设置路径为项目根路径

String key = "catalina.base";
if (System.getProperty(key) == null) {//不在tomcat中,需定义
	String root = ctx.getRealPath("/");//就保存在项目下
	System.setProperty(key, root);
}

 这样.如果再tomcat中,会保存日志文件到tomcat/logs下.否则保存到webapp/logs下

 

附上一个典型的log4j配置

 

log4j.rootLogger=INFO, A1, A2

# A1 is set to be ConsoleAppender sending its output to System.out
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss} %-5p [%t] (%F:%L) %3x - %m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Threshold=INFO
#log_dir\u5728AppListener\u4e2d\u83b7\u5f97\u5e76\u8bbe\u7f6e\u5982System
log4j.appender.A2.File=${catalina.base}/logs/web.log
log4j.appender.A2.Append=true
log4j.appender.A2.MaxFileSize=100KB
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5r %-5p [%t] %c{2}:%L - %m%n
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值