java 日志输出线程id_在日志中显示线程ID而不是线程名称

小编典典

这是可能的,但并不像仅使用一些预配置的模式那样容易。

Log4j 1.X和Log4j 2.x没有用于打印线程ID的任何预配置模式,但是您始终可以使用一些“魔术”。

PatternLayout正在使用PatternParser标记为final类的类,并且将“模式”的静态映射作为键并将Converters类作为值。每当Parses从其开始以日志记录格式格式找到用于记录的格式时,%都会使用与此映射键匹配的转换器。

您不能将自己的规则添加到该地图,但仍可以编写自己的MyOwnPatternLayout:

public class MyOwnPatternLayout extends PatternLayout

这将在它的format方法中做到这一点:

public String format(LoggingEvent event) {

String log = super.format(event);

/*

Now you just have to replace with regex all occurences of %i or

any mark you would like to use as mark to represent Thread ID

with Thread ID value.

Only thing you have to be sure to not use any mark as your Thread ID

that already is defined by PatterParser class

*/

return log.replaceAll("%i", someThreadID);

}

唯一的问题是,您必须以某种方式获取该线程ID。有时您要做的就是解析线程名称,您可以轻松地收集它:

String threadName = event.getThreadName();

例如,Apache-Tomcat将线程ID放在线程名称 http-nio- / 127.0.0.1-8084“ -exec-41 的末尾。

为了确保线程ID正确,您还可以创建自己的LogginEvent和Logger子类(MyLoggingEvent和MyLogger),并在MyLogger内创建MyLoggingEvent巫婆还将线程ID不仅作为线程名作为参数。然后,您可以轻松地在上面的代码中收集它。

抱歉,我的回答很长,希望至少能对您有所帮助。

2020-11-16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值