我在 Log4j2 上开发了一个包装类。使用 OSGi 的声明性服务,我使用我自己的记录器接口发布了一个自定义记录器服务,并以包装器类作为实现。包装类仅用于以编程方式配置记录器、消息格式化和添加更多方法,最后它调用 Log4j2 的日志记录方法。
我想打印日志文件中请求的每个日志的源类/文件名和行号。选项 %C/%F 和 %L 仅打印有关我的包装类中我实际调用的位置的信息log方法。
所以作为一项锻炼,我通过了新的可抛出的每次作为参数,以便我可以使用布局%throwable{short.lineNumber}。但这对于嵌入式应用程序来说是一个昂贵的过程。
我的主要问题是获取行号,因为对于文件名,我至少可以从 Log4j2 请求一个新记录器,其中包含请求记录器服务的每个服务的名称,并将其保存在映射中。
有没有办法追踪调用者?我希望对于那些不希望记录器服务的每个使用者都拥有 LOG4j2 jar 的应用程序有一个类似的解决方案。仅供参考,我不想使用任何 XML 文件,所有配置都是以编程方式进行的。
您可以使用
StackTraceElement[] stes = Thread.currentThread().getStackTrace();
但我不确定这是否便宜得多。
我所做的就是使每条消息(对于班级)都是唯一的,并避免包含行号。您可以在 IDE 中搜索唯一消息来查找行号。该类应该以记录器的名称命名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)