根据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中破坏了这个功能。
答案 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