特殊的 log4j:ERROR Failed to rename 问题

由于业务功能的需要,我们需要分流日志语句到不同的文件里,我们的 log4j.properties 配置如下:

### set log levels ###
log4j.rootLogger = INFO,CONSOLE,D
log4j.logger.firstLogger = INFO,firstAdpter
log4j.logger.secondLogger = INFO,secondAdpter

###  output to the console ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
...

### Output to the log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/mylog/logError.log
...


### Output to the first log file ###
log4j.appender.firstAdpter = org.apache.log4j.DailyRollingFileAppender
log4j.appender.firstAdpter.File = D:/mylog/logError.log 
...


### Output to the multi-centres log file ###
## reference : https://blog.csdn.net/tterminator/article/details/53559936
log4j.appender.secondAdpter = org.apache.log4j.DailyRollingFileAppender
log4j.appender.secondAdpter.File = D:/mylog/log-mutli-centres.log
...

由于rootLogger 和一个logger 输出的文件一样,导致日志文件名无法重命名,也就是类似 log4j:ERROR Failed to rename [D:/mylog/logError.log] to [D:/mylog/logError.log.2019-08-07] 错误。但是,我把文件名修改为各不相同就没有这个问题了:

### set log levels ###
log4j.rootLogger = INFO,CONSOLE,D
log4j.logger.firstLogger = INFO,firstAdpter
log4j.logger.secondLogger = INFO,secondAdpter

###  output to the console ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
...

### Output to the log file ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/mylog/logError.log
...


### Output to the first log file ###
log4j.appender.firstAdpter = org.apache.log4j.DailyRollingFileAppender
log4j.appender.firstAdpter.File = D:/mylog/logError-mutli-host.log 
...


### Output to the multi-centres log file ###
## reference : https://blog.csdn.net/tterminator/article/details/53559936
log4j.appender.secondAdpter = org.apache.log4j.DailyRollingFileAppender
log4j.appender.secondAdpter.File = D:/mylog/log-mutli-centres.log
...

根据网友的说法,是 tomcat 的server.xml 里面的 Host 设置错误,我查看了我的server.xml,确实有 <Context docBase="xxxx" path="/" reloadable="true"/> 这个设置,但却并不会导致 rename failed 的问题。(我是在 Eclipse 启动 tomcat 的,eclipse 会使用元数据修改拷贝过来的 tomcat 的 server.xml)

查看了源码,log4j.properties 里面的 appender 都会被反射生成实例,为啥两个 appender 实例使用同一个文件,在重命名的时候会报错呢,实在不知道从哪思考问题的根源。哪位网友有思路,请不吝赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值