配置log4j.properties文件|分离日志

配置log4j.properties文件|分离日志,log4j,Log4j,我在我的webpoject中使用hibernate。我的log4j.propertes在WEB-INF/classes下。我希望为hibernate日志和我的应用程序日志提供单独的日志文件。在快照中,我对hibernate日志不感兴趣,但只对我的应用程序日志感兴趣 我的log4j属性中有以下内容 # Define the root logger with appender file logDir = ${catalina.home}/logs/akp.log log4j.rootLogger =

我在我的webpoject中使用hibernate。我的log4j.propertes在WEB-INF/classes下。我希望为hibernate日志和我的应用程序日志提供单独的日志文件。在快照中,我对hibernate日志不感兴趣,但只对我的应用程序日志感兴趣

我的log4j属性中有以下内容

# Define the root logger with appender file
logDir = ${catalina.home}/logs/akp.log
log4j.rootLogger = DEBUG, FILE

#Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File= ${catalina.home}/logs/${fileName}.log
在我的应用程序中,我得到了我的记录器的一个实例

private Logger logger = Logger.getLogger(MyClass.class.getName());
但在logs文件夹中,我只能看到一个exmpt名称为:.log(不是xyz.log)的文件。使用此名称,我有所有混合日志。我希望在使用时为我的每个应用程序类创建单独的日志文件

 logger = Logger.getLogger(MyClass.class.getName());
是否替换了${filename}中的“filename”? 是否在catalina.home文件夹下创建日志文件,如果没有,请检查是否声明了catalina.home?

是否替换了${filename}中的“filename”?
是否在catalina.home文件夹下创建日志文件,如果没有,请检查您的catalina.home是否已声明?

您的log4j属性文件正在声明变量,但未使用它们。你也有一些其他问题,问了三个不同的问题

这里定义变量“logDir”:

logDir=${catalina.home}/logs/akp.log (您在这里混淆了文件名和目录)

这里使用变量'fileName',根本不引用logDir

log4j.appender.FILE.FILE=${catalina.home}/logs/${fileName}.log

您需要进行一些更改以实现您所描述的(还有大量其他选项和含义),但这里有一个开始-分别声明您的目录和文件名:

logDir=${catalina.home}/logs fileName=myAppLog.log

指定根类别追加器(使用比“文件”更好的命名约定)。就我个人而言,我从未在根目录下使用DEBUG,除非它是一个非常小的应用程序:

log4j.rootLogger=DEBUG,myAppAppender

使用日志目录和文件名创建appender。使用“附加到添加”决定是添加到现有文件还是覆盖:

log4j.appender.myAppAppender=org.apache.log4j.FileAppender log4j.appender.myAppAppender.File=${logDir}/${fileName} log4j.appender.myAppAppender.Append=true

然后,可以为不同的应用程序类别指定其他附加程序(和文件)。根据需要/方便地参数化文件名,使用additivity=false将条目仅保留在此特定日志中:

log4j.category.com.company.package.specialpackagename=INFO,specialAppender log4j.appender.specialAppender=org.apache.log4j.FileAppender log4j.appender.specialAppender.File=${logDir}/specialPackageLog.log log4j.appender.specialAppender.Append=true log4j.appender.specialAppender.Additivity=false

这应该会让你开始(如果你还没有得到它:)

干杯


Rob

您的log4j属性文件正在声明变量,但没有使用它们。你也有一些其他问题,问了三个不同的问题

这里定义变量“logDir”:

logDir=${catalina.home}/logs/akp.log (您在这里混淆了文件名和目录)

这里使用变量'fileName',根本不引用logDir

log4j.appender.FILE.FILE=${catalina.home}/logs/${fileName}.log

您需要进行一些更改以实现您所描述的(还有大量其他选项和含义),但这里有一个开始-分别声明您的目录和文件名:

logDir=${catalina.home}/logs fileName=myAppLog.log

指定根类别追加器(使用比“文件”更好的命名约定)。就我个人而言,我从未在根目录下使用DEBUG,除非它是一个非常小的应用程序:

log4j.rootLogger=DEBUG,myAppAppender

使用日志目录和文件名创建appender。使用“附加到添加”决定是添加到现有文件还是覆盖:

log4j.appender.myAppAppender=org.apache.log4j.FileAppender log4j.appender.myAppAppender.File=${logDir}/${fileName} log4j.appender.myAppAppender.Append=true

然后,可以为不同的应用程序类别指定其他附加程序(和文件)。根据需要/方便地参数化文件名,使用additivity=false将条目仅保留在此特定日志中:

log4j.category.com.company.package.specialpackagename=INFO,specialAppender log4j.appender.specialAppender=org.apache.log4j.FileAppender log4j.appender.specialAppender.File=${logDir}/specialPackageLog.log log4j.appender.specialAppender.Append=true log4j.appender.specialAppender.Additivity=false

这应该会让你开始(如果你还没有得到它:)

干杯


Rob

我遇到了一个类似的问题,我使用log4j.properties,目的是将日志从一个包层次结构推送到一个文件中,将来自不同包层次结构的日志推送到第二个文件中

虽然这个问题有一个可以接受的答案,但我写这篇文章只是为了帮助那些无法配置它的人

我们需要为每个记录器配置Appender,并定义两个记录器,如下所示:

# Direct log messages to a log file
log4j.appender.metering_app=org.apache.log4j.RollingFileAppender
log4j.appender.metering_app.File=C:/logs/Metering_INFO.log 
log4j.appender.metering_app.MaxFileSize=10MB
log4j.appender.metering_app.MaxBackupIndex=50
log4j.appender.metering_app.layout=org.apache.log4j.PatternLayout
log4j.appender.metering_app.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{2}:%L - %m%n
log4j.appender.metering_app.filter.ID=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.metering_app.filter.ID.LevelMax=FATAL
log4j.appender.metering_app.filter.ID.LevelMin=INFO
log4j.appender.metering_app.filter.ID.AcceptOnMatch=true


# Direct log messages to a log file
log4j.appender.notification_app=org.apache.log4j.RollingFileAppender
log4j.appender.notification_app.File=C:/logs/Notification_INFO.log 
log4j.appender.notification_app.MaxFileSize=10MB
log4j.appender.notification_app.MaxBackupIndex=50
log4j.appender.notification_app.layout=org.apache.log4j.PatternLayout
log4j.appender.notification_app.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{2}:%L - %m%n
log4j.appender.notification_app.filter.ID=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.notification_app.filter.ID.LevelMax=FATAL
log4j.appender.notification_app.filter.ID.LevelMin=INFO
log4j.appender.notification_app.filter.ID.AcceptOnMatch=true

#root logger
log4j.logger.com.test.metering=INFO, metering_app
log4j.additivity.com.test.metering=false
log4j.logger.com.test.notification=INFO, notification_app
log4j.additivity.com.test.notification=false

我在使用log4j.properties时遇到了类似的问题,其目的是将日志从一个包层次结构推送到一个文件中,而将来自不同包层次结构的日志推送到第二个文件中

虽然这个问题有一个可以接受的答案,但我写这篇文章只是为了帮助那些无法配置它的人

我们需要为每个记录器配置Appender,并定义两个记录器,如下所示:

# Direct log messages to a log file
log4j.appender.metering_app=org.apache.log4j.RollingFileAppender
log4j.appender.metering_app.File=C:/logs/Metering_INFO.log 
log4j.appender.metering_app.MaxFileSize=10MB
log4j.appender.metering_app.MaxBackupIndex=50
log4j.appender.metering_app.layout=org.apache.log4j.PatternLayout
log4j.appender.metering_app.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{2}:%L - %m%n
log4j.appender.metering_app.filter.ID=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.metering_app.filter.ID.LevelMax=FATAL
log4j.appender.metering_app.filter.ID.LevelMin=INFO
log4j.appender.metering_app.filter.ID.AcceptOnMatch=true


# Direct log messages to a log file
log4j.appender.notification_app=org.apache.log4j.RollingFileAppender
log4j.appender.notification_app.File=C:/logs/Notification_INFO.log 
log4j.appender.notification_app.MaxFileSize=10MB
log4j.appender.notification_app.MaxBackupIndex=50
log4j.appender.notification_app.layout=org.apache.log4j.PatternLayout
log4j.appender.notification_app.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %5p %c{2}:%L - %m%n
log4j.appender.notification_app.filter.ID=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.notification_app.filter.ID.LevelMax=FATAL
log4j.appender.notification_app.filter.ID.LevelMin=INFO
log4j.appender.notification_app.filter.ID.AcceptOnMatch=true

#root logger
log4j.logger.com.test.metering=INFO, metering_app
log4j.additivity.com.test.metering=false
log4j.logger.com.test.notification=INFO, notification_app
log4j.additivity.com.test.notification=false

尽管如此,
log4j.properties
的预处理和手动替换非常罕见。Log4j基于系统变量进行替换。通常它们是在Tomcat开始文件中定义的。它创建了日志文件@C:\Program Files(x86)\Apache Software Foundation\Apache Tomcat 7.0.11\logs,因此我认为catalina\u home已声明。另外,如果我在命令提示符中回显%CATLINA\u home%,我会得到C:\Program Files(x86)\Apache Software Foundation\Apa