Log4j2日志开头出现意外长整数值问题求助
解决Log4j2日志开头冒出来多余长整数值的问题
嘿,我之前也碰到过一模一样的情况,结合你给出的配置片段,大概率是PatternLayout的配置出了小问题,给你几个排查和解决的方向:
1. 先检查你的Pattern格式是否完整
你贴出来的pattern是[%t]%5level %d{ISO...,明显没写完对吧?如果实际配置里的占位符没正确闭合(比如%d{ISO8601}漏写了结尾的}),或者不小心加了不该有的占位符——比如%i,这个是Log4j2里用来标记滚动文件的递增计数器,会输出一串长整数,刚好就是你看到的多余值。
举个反面例子,要是你不小心写成这样:
<pattern>%i [%t]%5level %d{ISO8601} %m%n</pattern>
那%i就会把滚动文件的计数打在日志最开头,也就是你头疼的那个多余数值。
2. 修正成标准的Pattern写法
给你一个靠谱的标准模板,你可以参考调整:
<PatternLayout> <pattern>[%t] %5level %d{ISO8601} %c{1.} - %m%n</pattern> </PatternLayout>
每个部分的作用给你拆解下:
[%t]:打印当前日志的线程名称%5level:把日志级别对齐显示(占5个字符宽度,看起来更整齐)%d{ISO8601}:输出ISO标准格式的时间戳%c{1.}:简化打印类名(比如com.example.MyClass会变成MyClass)%m%n:打印日志消息本身,最后换行
3. 别把Log4j1和Log4j2的语法搞混了
如果之前用的是Log4j1,切换到Log4j2的时候要注意语法差异:
- 比如Log4j1里的
%x(NDC)在Log4j2里是大写的%X,大小写错了也会出奇怪的输出; - 还有些Log4j1独有的占位符,Log4j2不兼容,别乱套。
4. 最后检查下代码里的日志调用
要是配置改完还是有问题,就去看看代码里的日志语句——比如是不是不小心把一个长整数当成第一个参数传给了日志方法,比如logger.info(123456789, "用户登录成功"),这种情况下日志框架会把那个长整数直接打在消息开头。
内容的提问来源于stack exchange,提问作者Stefano
相关产品推荐
相关产品推荐

