Log4j模式布局%p令牌无法正常工作

时间:2013-11-22 09:26:09

标签: java log4j

根据PatternLayout类的log4j文档,它有以下代码段:

  

在上面的示例中,转换说明符%-5p表示日志记录事件的优先级应左对齐,宽度为五个字符。

我想只有一个字符作为日志优先级标识符,例如“DEBUG”变为“D”,“ERROR”变为“E”等等。

为了尝试实现这一点,我创建了以下PatternLayout:

consoleAppender.setLayout(new PatternLayout("%d{[dd/MM/yyy HH:mm:ss]} :: [%1p] :: %C{1} : %M :: %m%n"));

上面的代码给出了以下日志记录格式:

  
    

[22/11/2013 09:18:54] :: [INFO] :: RAMJobStore:initialize :: RAMJobStore已初始化。

  

特别是我做错了吗?文档似乎使这听起来很简单,除非在log4j 1.2.16中破坏了这个功能。

2 个答案:

答案 0 :(得分:1)

它没有被打破。

您正尝试在一个字符的字段中写入优先级。您的案例中的优先级值是“INFO”,一个四个字母的字符串。

文档说:

  

如果数据项大于最小字段宽度,则扩展该字段以容纳数据。

所以你要求在1个字符的字段中格式化,但它扩展为4。

答案 1 :(得分:1)

如果您使用EnhancedPatternLayout,则需要新的模式令牌来实现此目的:%level{length=1}

你的模式:

  

%d {[dd / MM / yyy HH:mm:ss]} :: [%level {length = 1}] ::%C {1}:%M ::%m%n

Online test for this pattern