(A)如何实现每个应用程序一个Logger实例,而不是每个类一个Logger实例。(b)我们是否可以定制stack-trace来仅打印错误发生的行号及其java类名称。
谢谢
发布于 2012-05-22 22:13:48
通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示了它们),因此以这种方式对记录器进行切片可能是多余的。
对于基于应用程序或层的记录器,问题是你必须找到一个地方来粘贴记录器对象。没什么大不了的。更大的问题是,一些类可能在多个应用程序的多个级别上使用……这可能很难让你的记录器正确。或者至少是棘手的。
...and你最不希望的就是在你的日志设置中出现错误的假设。
如果您关心应用程序和层,并且具有简单的分离点,则NDC是最佳选择。代码有时可能有点过多,但我不知道准确的上下文堆栈拯救了我多少次,它告诉我Foo.bar()是从Y层中的应用程序X调用的。
最常用的策略是为每个类创建一个记录器。如果你创建了新的线程,给它们一个有用的名字,这样它们的日志记录就很容易区分了。
为每个类创建记录器的好处是能够在类的包结构中打开/关闭日志记录:
log4j.logger.org.apache = INFO
log4j.logger.com.example = DEBUG
log4j.logger.com.example.verbose = ERROR上面的代码会将所有apache库代码设置为INFO级别,将日志记录从您自己的代码切换到DEBUG级别,但详细包除外。
发布于 2012-05-22 22:15:45
(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。
https://stackoverflow.com/questions/10703780
复制相似问题