gpt4 book ai didi

Log4j2 - PatternLayout 依赖于 LogLevel

转载 作者:行者123 更新时间:2023-12-05 06:42:42 26 4
gpt4 key购买 nike

是否可以定义两个不同的 PatternLayouts 并依赖于它使用第一个或第二个的应用程序 LogLevel?

示例:

如果我使用默认的 ERROR 级别运行我的应用程序,它应该打印如下日志语句:

$java -jar myApp.jar param1=value1

Error Message 1
Error Message 2

但是如果我使用 INFO 或 DEBUG 运行我的应用程序,它应该打印如下日志语句:

$java -jar myApp.jar --debug param1=value1

DEBUG | 18.03.2016 11:04:43,412 1058 | Debug Message 1
DEBUG | 18.03.2016 11:04:43,412 1058 | Debug Message 2
INFO | 18.03.2016 11:04:43,414 1060 | Info Message 1
ERROR | 18.03.2016 11:04:43,420 1066 | Error Message 1
ERROR | 18.03.2016 11:04:43,420 1066 | Error Message 2

在内部,如果给出参数 --debug 或 --info,我的应用程序将切换全局 LogLevel。默认为错误。

我应该如何配置我的 log4j2.xml实现这个??我找不到任何解决办法。引用我的commandLine parserutil class我在运行时切换 LogLevel 的位置。

最佳答案

在@RemkoPopma 的提示下,我做了更多研究并找到了解决方案。我的 log4j2.xml 现在看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout>
<ScriptPatternSelector defaultPattern="%highlight{%-5p | %d{dd.MM.yyyy HH:mm:ss,SSS} %r | %m%n}">
<Script name="selector" language="javascript"><![CDATA[
substitutor.replace("${main:pacifyLogLevel}");
]]>
</Script>
<!-- INFO and DEBUG are using the defaultPattern -->
<PatternMatch key="ERROR" pattern="%-5p %m%n" />
</ScriptPatternSelector>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Logger name="com.geewhiz.pacify" level="error" />
<Root level="error">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>

我还必须将以下行添加到我的 Logging Util类,我在运行时切换 LogLevel:

MainMapLookup.setMainArguments(new String[] { "pacifyLogLevel", level.toString() });

结果

substitutor.replace("${main:pacifyLogLevel}");

在 PatternMatch 中使用和查找。如果没有找到,他使用 defaultPattern。所以在我的应用程序中只有 ERROR Level 有不同的 LogPattern。其他的使用默认的日志模式。

有没有更好的解决方案?

关于Log4j2 - PatternLayout 依赖于 LogLevel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com