我有一块Log4J2配置,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
那将以以下形式打印出日志记录:
10:49:55.700 INFO uk.co.ltheobald.myapp.packageA.Foo - Hello!
10:49:55.800 INFO uk.co.ltheobald.myapp.packageA.Bar - Hello!
10:49:55.900 INFO uk.co.ltheobald.myapp.packageA.subpackage.Foo - Hello!
我想将其缩小并从每行中删除uk.co.ltheobald.myapp.
部分。我知道我可以设置包级别来使用%logger{2}
打印最正确的X包,所以我会得到类似的结果:
10:49:55.700 INFO packageA.Foo - Hello!
10:49:55.800 INFO packageA.Bar - Hello!
10:49:55.900 INFO subpackage.Foo - Hello!
但是,当我将类嵌套到包结构中时,这会丢弃我的包命名的一部分。
肯定有办法说忽略前四个套餐?像%logger{-4}
这样的东西会很棒!有人提出任何线索吗?
答案 0 :(得分:1)
您如何在课堂上创建记录器?
如果我尝试
static Logger log = Logger.getLogger(MyMain.class.getName());
输出15:58:13.861 INFO com.pkg1.MyMain - 某事
我在日志输出中获取包名称。但是,以下代码只打印类名。
static Logger log = Logger.getLogger("pkg1.MyMain");
输出:15:57:33.814 INFO pkg1.MyMain - 某事
答案 1 :(得分:1)
我刚看了一下文档。
我认为RegexReplacement应该可用于此。它可能不是最快的,但应该相当容易使用。
另一种选择是编写客户格式化程序
答案 2 :(得分:1)
其他人建议使用创意解决方法,但我是否可以建议您在Log4j2 Jira issue tracker中针对此提出功能请求?
答案 3 :(得分:0)
我刚刚做了一个测试,这个模板删除了4个第一个包名:
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %replace{%logger}{^.*?\..*?\..*?\..*?\.}{} - %msg%n" />
您甚至可以使用(最小化模式):
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %replace{%logger}{^(.*?\.){4}}{} - %msg%n" />