有时当我看到我的日志代码时,我想知道我是否做得对.可能没有明确的答案,但我有以下问题:
图书馆课程
我有几个库类可能会记录一些INFO消息.致命错误报告为例外.目前我的类中有一个静态记录器实例,类名作为日志名称.(Log4j的:Logger.getLogger(MyClass.class))
这是正确的方法吗?也许这个库类的用户不希望我的实现发送任何消息,或者想要将它们重定向到特定于应用程序的日志.我应该允许用户从"外部世界"设置记录器吗?你如何处理这种情况?
一般日志
在某些应用程序中,我的类可能希望将日志消息写入未由类名称标识的特定日志.(即:) HTTP Request log这样做的最佳方法是什么?想到一个查找服务......
我想要一个由管理数据的几个任务生成的诊断日志.这些任务可能在多个线程中.每个任务都需要将一个元素(可能带有子元素)写入日志; 进去快点出去.如果这是一个单任务的情况,我会使用XMLStreamWriter,因为它似乎是简单/功能的最佳匹配,而不必在内存中保存一个膨胀的XML文档.
但这不是一个单任务的情况,我不确定如何最好地确保这是"线程安全",其中"线程安全"在这个应用程序中意味着每个日志元素应该正确和连续地写入日志(一个后另一个,不以任何方式交错).
有什么建议?我有一个模糊的直觉,即要使用的方法是使用一个日志元素队列(每个元素都可以快速生成:我的应用程序忙于执行对性能敏感的实际工作),并且有一个单独的线程来处理日志元素并将它们发送到文件,以便日志记录不会中断生产者.
日志记录不一定必须是XML,但我确实希望它是结构化的和机器可读的.
编辑:我把"threadsafe"放在引号中.Log4j似乎是一个显而易见的选择(对我来说很新但对社区来说很老),为什么重新发明轮子...