删除记录器名称的前X部分

时间:2014-04-24 09:59:29

标签: java log4j2

我有一块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}这样的东西会很棒!有人提出任何线索吗?

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" />