2012-05-22 171 views
0

(a)如何为每个应用程序实现一个Logger实例,而不是每个Class的一个Logger实例。 (b)我们可以定制堆栈跟踪以仅打印发生错误的行号及其Java类名称。登录web应用程序

感谢

回答

1

通常情况下,你必须每班记录器的设置,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果你的过滤器显示它们),那么以这种方式切分记录器可能是多余的。

关于基于应用程序或图层的记录器,问题是您必须找到一个位置来粘贴该记录器对象。没有什么大不了的。更大的问题是,某些类可能会在多个应用程序的多个层次上使用......可能很难让您的记录器正确。或者至少棘手。

...你想要的最后一件事是你的日志设置中的错误假设。

如果您关心应用程序和图层,并且有简单的分隔点,NDC就是您的选择。代码有时可能有点过分,但我不知道有多少次我通过精确的上下文堆栈保存,显示Foo.bar()是从Y层的应用程序X调用的。

策略最常用的是为每个类创建一个记录器。如果你创建新的线程给他们一个有用的名字,所以他们的日志很容易区分。

创建每班记录仪具有能够打开/关闭日志记录在你的类的封装结构的好处:

log4j.logger.org.apache = INFO 
log4j.logger.com.example = DEBUG 
log4j.logger.com.example.verbose = ERROR 

上面将设置所有的Apache库代码INFO水平,从登录交换机您自己的代码为DEBUG级别,但详细软件包除外。

0

(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。

+0

谢谢你tomkani – venkiboss