Log4j2: How can I get Class Name and Line Number without using Throwable?(Log4j2:如何在不使用Throwable的情况下获取类名和行号?)
问题描述
我在Log4j2上开发了一个包装类。通过使用OSGi的声明性服务,我使用自己的记录器接口发布了一个定制记录器服务,包装器类是其实现。包装类只是用来以编程方式配置记录器,消息格式化&;添加几个方法,最后调用Log4j2的记录方法。 我想打印日志文件中请求的每个日志的源类/文件名和行号。选项%C/%F和%L仅打印有关包装类中我实际调用log方法的位置的信息。
因此,作为练习,我每次都将new Throwable作为参数传递,这样我就可以使用布局%Throwable{Short.lineNumber}。但对于嵌入式应用程序来说,这是一个昂贵的过程。
我的主要问题是获取行号,因为对于文件名,我至少可以用请求记录器服务的每个服务的名称从Log4j2请求一个新的记录器,并将其保存在映射中。有没有解决方案来追踪呼叫者?我希望有一个类似的应用程序解决方案,其中您不希望在记录器服务的每个使用者上都有LOG4j2JAR。仅供参考,我不想使用任何XML文件,所有配置都是以编程方式进行的。
推荐答案
您可以使用
StackTraceElement[] stes = Thread.currentThread().getStackTrace();
不过,我不确定这个是否便宜。
我所做的是使每条消息都是唯一的(对于类),并避免包括行号。您可以在IDE中搜索唯一消息以找到行号。该类应该在记录器的名称中。
这篇关于Log4j2:如何在不使用Throwable的情况下获取类名和行号?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Log4j2:如何在不使用Throwable的情况下获取类名和行号?
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 转换 ldap 日期 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 获取数字的最后一位 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01