(a)如何为每个应用程序实现一个 Logger 实例,而不是每个 Class 一个 Logger 实例。(b) 我们可以自定义堆栈跟踪以仅打印错误发生的行号及其 java 类名。
谢谢
(a)如何为每个应用程序实现一个 Logger 实例,而不是每个 Class 一个 Logger 实例。(b) 我们可以自定义堆栈跟踪以仅打印错误发生的行号及其 java 类名。
谢谢
通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示它们),因此以这种方式切片记录器可能是多余的。
关于基于应用程序或层的记录器,问题是您必须找到一个放置该 Logger 对象的位置。没什么大不了的。更大的问题是某些类可能会在多个应用程序的多个级别上使用......可能很难让您的记录器正确。或者至少很棘手。
...您最不想要的就是日志记录设置中的错误假设。
如果您关心应用程序和层并且有简单的分离点,那么 NDC 就是您的最佳选择。代码有时可能有点过分,但我不知道有多少次我被准确的上下文堆栈保存,显示 Foo.bar() 是从 Y 层的应用程序 X 调用的。
最常用的策略是为每个类创建一个记录器。如果您创建新线程,请给它们一个有用的名称,以便它们的日志记录很容易区分。
为每个类创建记录器的好处是能够在类的包结构中打开/关闭日志记录:
log4j.logger.org.apache = INFO
log4j.logger.com.example = DEBUG
log4j.logger.com.example.verbose = ERROR
以上会将所有 apache 库代码设置为INFO
级别,将日志记录从您自己的代码切换到DEBUG
级别,但详细包除外。
(a) 为 getLogger() 的所有调用定义相同的类别:
// Create a logger per class:
static Logger log = Logger.getLogger(MyClass.class);
// Use the same logger for the whole application:
// use this line in all your classes:
static Logger log = Logger.getLogger("YourLogCategory");
HTH。