我从一个新的项目开始,并做了一些有关日志记录的注意事项。我总是使用这种模式,其中完成日志记录的每个类都有自己的静态Logger:
private static final Logger logger = Logger.getLogger(LoggingInterceptor.class);
我不太喜欢这种方法,因为我必须将此行复制到要记录某些内容的每个类中。我考虑过使用Android方法,其中有Log类及其静态方法进行记录。我开始在互联网上搜索其他人也做过的类似方法,但没有发现任何东西。
所以我的问题是:这种方法有什么缺点?
我遵循DRY模式,只不过有些优势而已。可以像Android中使用“标签”一样处理不同的类别,“标签”是静态Log方法的参数。例如:
Log.debug(tag, message, exception);
然后,Log类本身将使用通用的日志记录框架,例如Log4j甚至SLF4J。
因此,我对您的意见感兴趣。
最佳答案
基于java.util.logging.Logger API和this article,getLogger()
的主要原因是确保子系统之间独立使用相同的Logger
和Handler
集。
Java推荐的解决方案是获取每个文件顶部的Logger
,然后在需要时登录到该对象。
使用静态Log.debug
将要求每次都处理tag
,以便使用正确的Handler
集。因此,这比使Log对象准备就绪要低效率。
但是,如果您不使用handlers
或不区分子系统,则静态函数将是一个合理的捷径,只要所使用的库适合您的需求即可。