SLF4J - 无论日志级别如何都进行日志记录

时间:2014-12-18 13:31:34

标签: java logging slf4j logback

在我的Java应用程序中,我使用SLF4J + Logback进行日志记录。我在开发时使用 DEBUG 级别日志记录,在生产环境中使用 ERROR 级别日志记录。但是,无论日志级别如何,我都希望记录一些消息(类似于System.out.println("Some Message")但使用记录器)。

有没有实用的方法来实现这一目标?我可以使用错误或更低级别,但我想要做的是提供一些信息,因此logger.error("Some message");在语义上是错误的,这不是错误。

我可以在我的logback.xml中为我的班级/班级定义另一个记录器,但这不方便。

实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这就是SLF4J / Logback的精彩“标记”功能非常方便的地方。假设您要将所有警告/错误以及任何特殊“状态”消息记录到控制台。

你可以让一个类做这样的记录:

public class MyClass {
    private static final Marker status = MarkerFactory.getMarker("STATUS");
    private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void doSomething() {
        logger.info(status, "Beginning");
        logger.info("Regular info log");
        logger.warn("Warning");
        logger.info(status, "Done");
    }
}

然后,在logback.xml中,您将过滤以显示标记为“STATUS”的所有警告和消息:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
        <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
            <marker>STATUS</marker>
        </evaluator>
        <OnMatch>ACCEPT</OnMatch>
        <OnMismatch>NEUTRAL</OnMismatch>
    </filter>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
    </filter>
    <encoder>
        <pattern>${pattern}</pattern>
    </encoder>
</appender>

基本上,你有记录器的级别为DEBUG,以便所有进入appender,然后在appender中进一步filtering以获得你正在寻找的确切行。如果你试图为不同的类提供更多不同的日志记录级别,它可能会变得有点棘手,但Logback为过滤器提供了很大的灵活性(如果需要,你甚至可以制作自己的过滤器),这样可以处理几乎所有需要的东西。