2

我正在使用带有这样的日志原型的第三方软件库:

runtime.getInstance().log(int logtype, String moduleName, String logtext);

我有一个实用程序库,我希望它独立于库,但我也希望能够从我自己的类中将内容记录到软件包中。这很好,因为短信很普遍,比如“你传递了错误的数据!” 和“等等等等成功了!” 此外,我已经封装了软件供应商的日志功能,所以我什至不担心符合一些随机 API。

我担心(我为什么要写这篇文章)是我的系统中会有各种不同的模块。所以问题是这样的:

ModuleFoo extends com.thirdpartyvendor.BaseModule
ModuleBar extends com.thirdpartyvendor.BaseModule

ModuleFoo---包含 ---> 的实例IndependentDataStructure---尝试将日志条目写入我的WrappedLogger---> 但数据结构没有对ModuleFoo.

ModuleBar---包含 ---> 的实例IndependentDataStructure---尝试将日志条目写入我的WrappedLogger---> 但数据结构没有对ModuleBar.

目前我的系统传递了一个字段String moduleName,坦率地说让我感到恶心......但我希望日志条目告诉我我的模块是什么!如果不包含对 a (或 a )的引用,记录器如何知道实例是否IndependentDataStructure正在使用(或其他模块)?ModuleFooModuleBarIndependentDataStructureBaseModuleString moduleName

4

2 回答 2

2

Log4J 和 SLF4J 等日志 API 具有诊断上下文的概念,这是一种在映射中存储各种上下文信息位的方式,ThreadLocal日志消息格式化程序可以访问该映射来装饰消息。对此的典型用途是将当前经过身份验证的用户的名称放入 Web 应用程序的日志消息中(使用 servlet 过滤器将每个请求的用户名存储在 MDC 中),您是否能够在您的系统?

于 2012-10-24T12:41:36.487 回答
0
runtime.getInstance().log(int logtype, 
                          this.getClass().getSimpleName(), 
                          String logtext);

如果我做对了...

编辑:对于自动化(但有点慢)自动方法名称:

Thread.currentThread().getStackTrace()[level].getMethodName();

(其中level是一个整数,指定通过日志请求传递的类数)

于 2012-10-24T12:31:57.893 回答