我在 Log4j2 上开发了一个包装类。使用 OSGi 的声明性服务,我使用我自己的记录器接口发布了一个自定义记录器服务,并以包装器类作为实现。包装类仅用于以编程方式配置记录器、消息格式化和添加更多方法,最后它调用 Log4j2 的日志记录方法。
我想打印日志文件中请求的每个日志的源类/文件名和行号。选项 %C/%F 和 %L 仅打印有关我的包装类中实际调用log方法的位置的信息。
因此,作为一项练习,我每次都会传递new Throwable作为参数,以便我可以使用布局%throwable{short.lineNumber}。但这对于嵌入式应用程序来说是一个昂贵的过程。
我的主要问题是获取行号,因为对于文件名,我至少可以从 Log4j2 请求一个新记录器,其中包含请求记录器服务的每个服务的名称,并将其保存在映射中。
有没有办法追踪调用者?我希望对于那些不希望记录器服务的每个使用者都拥有 LOG4j2 jar 的应用程序有一个类似的解决方案。仅供参考,我不想使用任何 XML 文件,所有配置都是以编程方式进行的。