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
*/
java replace方法placeAll("%i", someThreadID);
}
唯⼀的问题是,您必须以某种⽅式获取该线程ID。有时您要做的就是解析线程名称,您可以轻松地收集它:
String threadName = ThreadName();
例如,Apache-Tomcat将线程ID放在线程名称 http-nio- / 127.0.0.1-8084“ -exec-41 的末尾。
为了确保线程ID正确,您还可以创建⾃⼰的LogginEvent和Logger⼦类(MyLoggingEvent和MyLogger),并在MyLogger内创建MyLoggingEvent巫婆还将线程ID不仅作为线程名作为参数。然后,您可以轻松地在上⾯的代码中收集它。
抱歉,我的回答很长,希望⾄少能对您有所帮助。
2020-11-16
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论