繁体   English   中英

为什么两个Logger不按照Log4j中的消息级别拆分消息?

Why two Loggers do not split messages according to their levels in Log4j?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想将所有记录器级别记录到一个文件(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 个回复

您可以在控制台附加程序上使用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 )。 这就是为什么错误仅出现在日志文件中的原因。

2 使用Log4j在不同的日志中记录不同的级别消息

我想使用apache Log4j.jar在我的web应用程序中维护两个日志文件: 1)一个日志将包含每个级别的所有日志消息2)第二个日志文件将包含特定类的日志消息 这是我正在使用的配置XML :(不太了解XML中使用的标记,只是尝试了) 通过上面的xml,我只获取FILE1中 ...

4 仅使用一个Logger将log4j记录到两个不同的文件中

我已经阅读了所有帖子,尽管我的问题重复了另一个问题,但没有一个答案真的使我感到困惑: 我有一个很大的项目,几乎每个班级都有一个记录器。 我不会只使用一个Logger,而是希望它创建-具有INFO和ERROR的日志文件-仅具有ERROR的单独的日志文件 这是用于登录的代码: ...

5 限制 Log4J 中的消息长度

我正在开发一个使用 Log4J 进行日志记录的应用程序。 有时,应用程序会创建很长的日志消息,&gt; 10000 个字符。 当日志显示在 Eclipse 的控制台窗口中时,这会导致性能问题。 我想限制最大消息长度,将长消息截断到最大长度。 我怎样才能用 Log4J 做到这一点? ...

2015-12-03 12:59:40 2 9472   log4j
6 在Log4J中设置消息模式

我有这个Log4J配置,它将消息生成到日志文件中: 这是生成的输出: 我想生成这样的消息: 如何从邮件中删除[LogMessages]? ...

7 Log4j显示级别不正确的消息

我正在寻找一个记录器配置,输出从一些包到文件和WARN和更高的消息到控制台的所有内容。 为了实现这一点,我写了以下log4j.xml文件: 但是,所有级别的日志消息不仅出现在文件中,还出现在控制台中,这不是我需要的。 我错过了什么? 谢谢。 保罗。 ...

9 是否可以使用Log4J仅记录一个级别的消息

如果我将日志级别设置为DEBUG,则将记录/打印所有日志级别&gt; = DEBUG的消息。 但是我可以将日志级别设置为仅DEBUG,以便打印仅具有DEBUG的日志级别的消息。 或者可以给出一个范围,比如打印日志级别&gt; = DEBUG但是&lt;ERROR? ...

10 log4j中的Logger.DebugFormat

我曾经使用过出色的log4net,并且我假设log4j是直接端口或祖先。 我正在寻找等效的Logger.DebugFormat()方法族,但找不到类似的东西。 log4j(或类似软件包)中是否有类似的东西? 如果没有,为什么不呢? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM