首先,我发现了一个非常相关的SO问题:
How can I set up separate streams of logging for log4j?
该问题的第一个答案讨论了如何使用标记,这就是我想尝试使用的标记。但是,我无法使日志真正按预期工作。我不知道我错过了一步还是使用了错误的语法。
我编写了一个非常简单的程序,试图对其进行测试。
package my.package;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
public class LoggingTest {
private static final Logger logger = LoggerFactory.getLogger(LoggingTest.class);
public static void main(String[] args) {
Marker marker = MarkerFactory.getMarker("MARKER");
logger.info(marker, "log info to marker log");
logger.info("log info to regular log");
}
}
log4j.xml:
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- APPENDERS -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.FileAppender">
<param name="file" value="session.log" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<appender name="marker-file" class="org.apache.log4j.FileAppender">
<param name="file" value="marker.log" />
<param name="append" value="true" />
<MarkerFilter marker="MARKER" onMatch="ACCEPT" onMismatch="DENY" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %c{2}:%L - %m%n" />
</layout>
</appender>
<!-- LOGGERS -->
<root>
<level value="INFO" />
<appender-ref ref="marker-file" />
</root>
</log4j:configuration>
现在的日志记录只是设置为记录到标记附加器。我将需要弄清楚如何设置记录器,以将“标记”输出发送到标记附加器,其余发送到“常规”附加器。
我不知道MarkerFilter
元素用法的语法是否正确。
执行程序时,我要指定VM参数-Dlog4j.configuration=file://<path to log4j.xml>
。
我正在eclipse中运行它,但遇到另一个问题,即它似乎无法识别我提供的log4j.xml文件。我认为这是我做错的事情(可能是我尝试做的事情似乎行不通的原因。)
关于我可能会不正确地做的任何想法,以至于无法识别log4j.xml,然后,如果全部检查出了我是否正确使用过滤器/标记机制,感谢。
更新:
我正在Windows机器上执行此操作,因此我怀疑如何为log4j.xml文件指定文件URI有点问题。