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的情况下获取类名和行号?
基础教程推荐
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01