Java Log4j模式布局%p令牌不工作

Java Log4j模式布局%p令牌不工作,java,log4j,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 ::

根据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]:[信息]::RAMJobStore:初始化::RAMJobStore已初始化

我有什么特别的地方做错了吗?文档似乎让这听起来很简单,除非log4j1.2.16中破坏了此功能

它没有坏

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

文件说:

如果数据项大于最小字段宽度,则字段将展开以容纳数据

因此,您要求在一个包含1个字符的字段中设置格式,但它扩展为4。

如果您使用新的模式标记来实现此目的:
%level{length=1}

您的模式:

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


啊,是的……的确如此。我知道我想做什么,尽管我没有看到文档的那一部分。谢谢在log4j2中,还可以将唯一名称设置为级别:%level{WARN=W,DEBUG=D,ERROR=E,TRACE=T,INFO=I,FATAL=F}测试: