我想将所有记录器级别记录到一个文件(FATAL-> ALL),并同时在控制台中显示ERROR级别和更高级别。 我正在使用root记录器将所有级别记录到文件,并使用单独的记录器将ERROR级别记录到控制台。 我的XML配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n" disableAnsi="false"/>
        </Console>

        <File name="File" fileName="output.log" bufferedIO="true" >
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"/>
        </File>
    </Appenders>

    <Loggers>
        <Root level="ALL">
            <AppenderRef ref="File"/>
        </Root>

        <Logger name="com.danielk" level="ERROR">
            <AppenderRef ref="Console"/>
        </Logger>

    </Loggers>
</Configuration>

我期望在文件中具有所有级别的日志记录,并且在控制台中只有“ Error”和更高级别的日志记录,但是在控制台(和文件)上都只有“ Error”级别:

23:19:54.422 [main]错误com.danielk.Example-示例中的错误错误错误23:19:54.434 [main]错误com.danielk.Main-错误main中的错误错误

消息本身是正确的构建,因为当我将两个记录器(Root和其他)都设置为“ ALL”级别时,我可以看到所有类型的消息(不仅是“ Error”级别)。

我应该怎么做才能拆分级别:

  1. 文件-所有级别
  2. 控制台-仅错误及以上?

#1楼 票数:1 已采纳

您可以在控制台附加程序上使用ThresholdFilter筛选出具有ERROR或更特定级别( https://logging.apache.org/log4j/2.x/manual/filters.html#ThresholdFilter )的日志事件。

整个配置,例如:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"
                    disableAnsi="false"/>
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        </Console>
        <File name="File" fileName="output.log" bufferedIO="true" append="false">
            <PatternLayout
                    pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=blue} %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="File"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

PS当您指定:

<Logger name="com.danielk" level="ERROR">
   <AppenderRef ref="Console"/>
</Logger>

然后将com.danielk所有子包和类的日志级别设置为ERROR (除非您配置更特定的记录器,例如使用不同级别的com.danielk.db.MyClass )。 这就是为什么错误仅出现在日志文件中的原因。

  ask by Daniel translate from so

未解决问题?本站智能推荐:

1回复

log4j日志文件排除日志消息

我正在使用BOM Finchley.RC2构建Spring Boot应用程序版本2.0.2.RELEASE ,并尝试使用log4j2.xml将日志写入文件中。 问题是我只想记录我的应用程序消息,例如: 但是日志文件显示了其他日志以及Spring日志等,如下所示: 我如何自定义l
2回复

为什么我的 log4j 类只记录 FATAL 消息?

我有以下 log4j Java 类: 在同一目录中,我有一个 log4j 属性文件: 正如你所看到的,我注释掉了logger.setLevel(Level.FATAL)代码,因为它导致我的程序崩溃(说它找不到 setLevel,即使我尝试了它也没有工作) 我的输出是这样的: pre
2回复

在文件log4j的开头附加日志消息

1.我正在尝试在文件开头添加日志消息,以便可以首先在日志文件上看到最新消息。 2.我想在日志文件后添加月份和年份,但是在当前的活动文件中却没有得到。 例如-test_2015-04-22.log 属性文件如下-
1回复

如何使用 Log4j 向 Graphite 发送日志消息计数?

我正在尝试使用此模块https://metrics.dropwizard.io/4.1.2/manual/log4j.html ,以便在 Graphite 中使用计数器记录警告和错误消息的数量。 无论如何,当我添加所需的依赖项,并按照文档https://metrics.dropwizard.io/
1回复

如何在 log4j 的 JSON 布局中为每条消息生成 UUID?

我需要为每个日志消息的相关键生成一个随机字符串,我发现有一种方法可以在 log4j 配置文件中生成 UUID。 在https://logging.apache.org/log4j/2.x/manual/layouts.html上提到了UUID ,但它没有说明如何使用它。 我试图将其设置为 Json
2回复

为什么log4j记录到两个单独的文件? [重复]

这个问题已经在这里有了答案: log4j rootlogger关闭某些类的记录器 2回答 我有以下log4j.properties文件,带有默认的附加程序和用于特定类的单独附加程序 ReportUtil设置为使用此记录器, private final L
2回复

Log4j2 程序化消息替换(从 log4j 替换 PatternLayout)

我们正在将日志记录从 log4j 迁移到 log4j2。 但是,我在迁移扩展PatternLayout的类时遇到问题,因为它现在是final 。 旧的模式布局代码将所有出现的\\r和\\n替换为| 除非它是堆栈跟踪。 我查看了 log4j2 的文档,但还没有找到适合这种问题的方法。 到目前为止,
1回复

如何独立于设置的日志级别在 log4j2 中记录消息

无论我的记录器设置了哪个级别,我都想记录一条消息,除非级别为 OFF。 我的理解是,以下将做到这一点。 但是,这不起作用,除非我在配置文件中将我的根记录器级别设置为 all。 我不想将记录器配置级别设置为全部,因为我不想调试日志中的信息消息。 其他选项是编写logger.trace()或log