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

标签 java logging slf4j logback

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

有什么实用的方法可以做到这一点吗?我可以使用错误或更低级别,但我想做的是提供一些信息,所以 logger.error("Some message"); 在语义上是错误的,它不是错误。

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

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

最佳答案

这就是 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 为过滤器提供了很大的灵 active (如果需要,您甚至可以制作自己的过滤器),这几乎可以处理任何需要的事情。

关于java - SLF4J - 无论日志级别如何都进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27547773/

相关文章:

java - log4j:WARN 在 org.apache.log4j.RollingFileAppender 中没有这样的属性 [rollingPolicy]

更改类的包名后,Java 对象将无法反序列化。我能做什么呢?

java - 在私有(private)方法内编写 switch 语句的测试用例

c++ - 编译时优化 - 从发布二进制文件中删除调试打印

.net - 通过 HTTP 记录错误 - 安全隐患

Node.js readStream 用于大文件末尾

java - 使用 log4j 进行 reSTLet 日志记录

java GC : what programming style makes safe point attainment easier (faster)?

javascript - Java Selenium - JavaScriptExecutor - 参数属于非法类型 : driverFactory. CustomWebElement

java - 在 Oracle 中将 NUMBER 保存为 TIMESTAMP