slf4j / log4j使用标记记录

时间:2019-05-07 19:43:10

标签: java log4j slf4j

首先,我发现了一个非常相关的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有点问题。

0 个答案:

没有答案