我有以下两个包:
com.mycorp.project.first
com.mycorp.project.second
我想配置Log4J(SLF4J)将日志从一个包写入一个文件,并从另一个包写入第二个文件。我不希望他们混在一起。
要清楚,这是一个项目/一个进程正在运行。
我尝试过滤和使用记录器,但它们似乎被log4j忽略了。两个文件总是完全相同。
编辑:感谢您到目前为止的答案,这就是我所拥有的并且它无法正常工作。两个输出文件都是相同的。
<configuration debug="true">
<contextName>dev</contextName>
<appender name="FIRST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>A:/dev/LogTesting/logs/first.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>A:/dev/LogTesting/logs/first.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="SECOND_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>A:/dev/LogTesting/logs/second.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>A:/dev/LogTesting/logs/second.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern>
</rollingPolicy>
<encoder>
<Pattern>%d{MMM dd HH:mm:ss.SSS} %property{HOSTNAME} [%thread] %level %logger{36} %msg%n</Pattern>
</encoder>
</appender>
<!-- =============================================================== -->
<logger name="com.test.apples" additivity="false">
<level value="DEBUG" />
<appender-ref ref="FIRST_FILE" />
</logger>
<logger name="com.test.oranges" additivity="false">
<level value="DEBUG" />
<appender-ref ref="SECOND_FILE" />
</logger>
<!-- =============================================================== -->
<category name="com.test.apples" additivity="false">
<priority value="DEBUG"/>
<appender-ref ref="FIRST_FILE"/>
</category>
<category name="com.test.oranges" additivity="false">
<priority value="DEBUG"/>
<appender-ref ref="SECOND_FILE"/>
</category>
<!-- =============================================================== -->
<!-- default -->
<root level="WARN">
<appender-ref ref="FIRST_FILE" />
<appender-ref ref="SECOND_FILE" />
</root>
答案 0 :(得分:23)
尝试这是属性文件的示例:
log4j.rootLogger=DEBUG, CONSOLE
# Each package has different appender name
log4j.logger.com.mycorp.project.first=DEBUG, FIRST
log4j.logger.com.mycorp.project.second=DEBUG, SECOND
log4j.appender.FIRST=org.apache.log4j.RollingFileAppender
log4j.appender.FIRST.File=./first.log
log4j.appender.FIRST.layout=org.apache.log4j.PatternLayout
log4j.appender.SECOND=org.apache.log4j.RollingFileAppender
log4j.appender.SECOND.File=./second.log
log4j.appender.SECOND.layout=org.apache.log4j.PatternLayout
或者这个用于XML(仅突出显示重要部分):
<!-- FIRST appender definition -->
<appender name="FIRST" class="org.apache.log4j.FileAppender">
...
</appender>
<!-- SECOND appender definition -->
<appender name="SECOND" class="org.apache.log4j.FileAppender">
...
</appender>
<!-- logger package com.mycorp.project.first -->
<logger name="com.mycorp.project.first">
<level value="DEBUG" />
<appender-ref ref="FIRST"/>
</logger>
<!-- logger for package com.mycorp.project.second -->
<logger name="com.mycorp.project.second">
<level value="DEBUG" />
<appender-ref ref="SECOND"/>
</logger>
答案 1 :(得分:2)
创建两个appender LOG1
和LOG2
,每个日志文件一个。之后,在log4j配置文件中引用这些appender定义两个类别(每个包一个)。
<category name="com.mycorp.project.first" additivity="true">
<priority value="TRACE"/>
<appender-ref ref="LOG1"/>
</category>
Appender2
<category name="com.mycorp.project.second" additivity="true">
<priority value="TRACE"/>
<appender-ref ref="LOG2"/>
</category>
答案 2 :(得分:1)
将动态文件路径.in log4j.properties
放入log4j.appender.FILE.File=${file.name}
在java设置文件路径System.setProperty("file.name", FILEPATH);
答案 3 :(得分:0)
您只需指定2个appender,但为两者提供相同的输出日志文件名。
#same appender for both packages
log4j.logger.package1=INFO,MyCommonLogger
log4j.logger.package2=INFO,MyCommonLogger
log4j.appender.MyCommonLogger=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MyCommonLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.MyCommonLogger.layout.ConversionPattern=%t %d{MM/dd/yy HH:mm:ss} %x %-5p %c %M - %m%n
#single log file for logs from both packages
log4j.appender.MyCommonLogger.File=/somewhereonserver/log/mysinglelogfile.log