对此答案的评论如何减少Java日志记录样板代码?强烈建议不要使用记录器作为实例成员变量.我可以想到两个负面的副作用:
1)超类日志与子类的记录器
2)对象无法序列化(除非标记为瞬态)
但是,如果不需要序列化并且使用子类名称进行日志记录不是问题,那还有什么可以避免的原因吗?我认为它减少了样板代码,避免了将logger变量定义从一个类复制到另一个类时的复制粘贴错误.即使Spring框架(我相信它具有非常好的编码标准)也使用这种方法.
如果Logger是实例成员而不是静态成员,则每次创建新对象时都必须检索Logger.尽管这种开销可能微不足道,但这是一个缺点.
从设计的角度来看,Loggers实际上并不是对象的属性,因为它们通常是关于系统的元信息,而不是系统本身的业务信息.一个Logger
是不是真的喜欢一个东西部分Car
以相同的方式对象Engine
或Transmission
为.将Logger绑定到对象作为成员(在大多数情况下)在语义上没有任何意义.
尝试调试错误,当SuperClass
错误真正记录在类中时,您会看到类生成的消息SubClass
。我见过几种情况,开发人员创建一个LoggingUtils
类来生成消息,这些消息通常会复制日志框架已经内置的内容。
我看到的使用共享日志记录实例的唯一真实情况是类似于 Apache commons HttpClient 记录器httpclient.wire
,它在多个类之间共享,用于记录通过客户端发送的请求和响应的内容。这种特定的日志记录情况不会记录包实际实现的信息,它会记录有关整个 http“事务”的信息。
归档时间: |
|
查看次数: |
7231 次 |
最近记录: |