【发布时间】:2013-01-18 10:19:29
【问题描述】:
在某些应用程序中,无论当前的日志级别设置如何,您总是希望记录一些重要消息(例如应用程序启动和关闭)。确保使用 log4j 和 log4net 等框架记录重要消息的唯一方法是将引发的消息的日志级别设置为 FATAL。
有没有更好的方法来做到这一点,因为FATAL 在应用程序启动正常且没有错误时似乎是一个误导类别?
【问题讨论】:
标签: log4j log4net nlog log4cxx log4php
在某些应用程序中,无论当前的日志级别设置如何,您总是希望记录一些重要消息(例如应用程序启动和关闭)。确保使用 log4j 和 log4net 等框架记录重要消息的唯一方法是将引发的消息的日志级别设置为 FATAL。
有没有更好的方法来做到这一点,因为FATAL 在应用程序启动正常且没有错误时似乎是一个误导类别?
【问题讨论】:
标签: log4j log4net nlog log4cxx log4php
对于 log4j(同样对于 log4cxx),您可以执行以下操作:
public class Always {
private static Logger logger = Logger.getLogger("logAlways");
public static void log(String message) {
logger.info(message);
}
}
然后配置logAlways记录器来记录INFO以上的所有内容:
log4j.logger.logAlways=INFO
这也可以通过 API 进行配置,以避免有人(非)故意更改配置文件:
public class Always {
private static Logger logger = null;
static {
logger = Logger.getLogger("logAlways");
logger.setLevel(Level.INFO);
}
public static void log(String message) {
logger.info(message);
}
}
使用它然后喜欢
Always.log("Starting up");
【讨论】:
log4net 提供了关于如何记录和记录在哪里的各种配置。您可以对某些消息进行过滤器和特殊的附加程序来记录级别信息的一些消息。您想要做的事情在 log4X 框架中已经成为可能。查看文档以了解如何执行此操作。
ILog log = LogManager.GetLogger("MyAllwaysLogMessages");
log.Info(....
现在您可以过滤 MyAllwaysLogMessages 以将它们添加到您的日志中。
【讨论】:
不,将消息记录设置为可用的最高记录级别只是为了确保它们始终被记录是错误的方法。
首先,定义你想要拥有的东西。例如,为什么记录应用程序的启动和停止很重要?
请注意,有多种日志记录。在调查出了什么问题时,通常的日志记录是对开发人员的某种帮助。这是调试日志,它通常是可选的,因为如果应用程序工作与否,它对于日志部分并不重要。如果可用,可以通过不同的方式进行调试。
另一种日志记录是审计日志记录。如果用户登录或注销、更改密码或稍后执行任何其他感兴趣的操作,则可能需要登录,以便能够验证每个操作是否已正确启动和完成。
任何 Log4X 框架都应该能够支持这两种日志记录要求,但不同之处在于您应该对它们进行不同的配置。审计日志不允许任何消息不发送到日志附加器,但很可能附加器与调试日志不同。充分利用您将拥有多个记录器并可以对其进行不同配置这一事实。
【讨论】: