首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >登录web应用程序

登录web应用程序
EN

Stack Overflow用户
提问于 2012-05-22 22:10:08
回答 2查看 115关注 0票数 0

(A)如何实现每个应用程序一个Logger实例,而不是每个类一个Logger实例。(b)我们是否可以定制stack-trace来仅打印错误发生的行号及其java类名称。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-05-22 22:13:48

通常,您会为每个类设置记录器,因为这是一个很好的逻辑组件。线程已经是日志消息的一部分(如果您的过滤器显示了它们),因此以这种方式对记录器进行切片可能是多余的。

对于基于应用程序或层的记录器,问题是你必须找到一个地方来粘贴记录器对象。没什么大不了的。更大的问题是,一些类可能在多个应用程序的多个级别上使用……这可能很难让你的记录器正确。或者至少是棘手的。

...and你最不希望的就是在你的日志设置中出现错误的假设。

如果您关心应用程序和层,并且具有简单的分离点,则NDC是最佳选择。代码有时可能有点过多,但我不知道准确的上下文堆栈拯救了我多少次,它告诉我Foo.bar()是从Y层中的应用程序X调用的。

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

为每个类创建记录器的好处是能够在类的包结构中打开/关闭日志记录:

代码语言:javascript
复制
log4j.logger.org.apache = INFO
log4j.logger.com.example = DEBUG
log4j.logger.com.example.verbose = ERROR

上面的代码会将所有apache库代码设置为INFO级别,将日志记录从您自己的代码切换到DEBUG级别,但详细包除外。

票数 1
EN

Stack Overflow用户

发布于 2012-05-22 22:15:45

(a)为getLogger()的所有调用定义相同的类别:

代码语言:javascript
复制
// 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10703780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档