为什么log4j无法生成备份文件?

时间:2008-10-06 02:04:54

标签: java windows logging log4j

我正在Windows 2003服务器R2上运行一些java进程 我正在使用Apache log4j-1.2.8。我的所有流程都通过调用 一个带有不同参数示例的jar文件

    java -jar process.jar one 
    java -jar process.jar two
    java -jar process.jar three

我按照

配置log4j.properties
#=============================== 
# Declare Variables
#===============================
logpath=${user.dir}/log/
simple_pattern=%d{yyyy-MM-dd HH:mm:ss.SSS}%-5x - %m%n
backup_pattern='.'yyyy-MM-dd

#===============================
# PROCESS & STANDARD OUTPUT
#===============================
log4j.logger.process.Process=NULL,proclog,procstdout
log4j.appender.proclog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.proclog.File=${logpath}process.log
log4j.appender.proclog.DatePattern=${backup_pattern}
log4j.appender.proclog.layout=org.apache.log4j.PatternLayout
log4j.appender.proclog.layout.conversionPattern=${simple_pattern}

log4j.appender.procstdout=org.apache.log4j.ConsoleAppender
log4j.appender.procstdout.layout=org.apache.log4j.PatternLayout
log4j.appender.procstdout.layout.ConversionPattern=${simple_pattern}

#===============================
# ONE
#===============================
log4j.logger.process.log.One=NULL,one
log4j.appender.one=org.apache.log4j.DailyRollingFileAppender
log4j.appender.one.File=${logpath}one.log
log4j.appender.one.DatePattern=${backup_pattern}
log4j.appender.one.layout=org.apache.log4j.PatternLayout
log4j.appender.one.layout.conversionPattern=${simple_pattern}

#===============================
# TWO
#===============================
log4j.logger.process.log.Two=NULL,two
log4j.appender.two=org.apache.log4j.DailyRollingFileAppender
log4j.appender.two.File=${logpath}two.log
log4j.appender.two.DatePattern=${backup_pattern}
log4j.appender.two.layout=org.apache.log4j.PatternLayout
log4j.appender.two.layout.conversionPattern=${simple_pattern}

#===============================
# THREE
#===============================
log4j.logger.process.log.Three=NULL,three
log4j.appender.three=org.apache.log4j.DailyRollingFileAppender
log4j.appender.three.File=${logpath}three.log
log4j.appender.three.DatePattern=${backup_pattern}
log4j.appender.three.layout=org.apache.log4j.PatternLayout
log4j.appender.three.layout.conversionPattern=${simple_pattern}

我第一次使用进程appender是单一记录器,现在我把它分开了 到一个,两个和三个记录器。 我的进程每隔1分钟由Windows计划执行一次。

因此。我遇到了大问题   我不知道为什么log4j无法生成备份文件。 但是当我通过命令行执行手动时它没问题。

3 个答案:

答案 0 :(得分:2)

调度程序执行时,log4j.properties文件是否在类路径中?我过去遇到过类似的问题,原因是配置文件不在类路径中。

您可以将其包含在process.jar文件中,或者像下面这样指定其位置:

  

的java   -Dlog4j.configuration =文件:///path/to/log4j.properties   -jar process.jar one

答案 1 :(得分:0)

根据javadocs,追加应该是默认值,但是值得在配置文件中指定它以消除歧义。幸运的话,它可能会解决您的问题

log4j.appender.three.Append=true

答案 2 :(得分:-1)

非常感谢,我会再次尝试您的解决方案。

现在我的日程安排执行了我的流程 bgprocess.bat

<强> bgprocess.bat

@echo off
set CLASSPATH=.;%CLASSPATH%
set path=C:\j2sdk1.4.2\bin;%path%
javaw -jar process.jar %1

process.jar manifest.mf

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2 (IBM Corporation)
Main-Class: process.Process
Class-Path: ./lib/Utility.jar ./lib/DB2LibRAD.jar ./lib/rowset.jar ./l
 ib/log4j-1.2.8.jar ./lib/com.ibm.mq.jar .

进程目录

   - process.jar
   - bgprocess.bat
   - lib <dir>
               - log4j-1.2.8.jar
               - com.ibm.mq.jar
               - connector.jar
               - DB2LibRAD.jar
               - rowset.jar
               - Utility.jar                    
   - log <dir>
               - one.log
               - two.log
               - three.log
               - process.log

并且所有日志文件正常工作但通过备份时间 它将截断并在第一行开始新的日志。