日志框架中重要但非致命的日志消息(log4j、log4net、log4hp、log4cxx、NLog)

日志框架中重要但非致命的日志消息(log4j、log4net、log4hp、log4cxx、NLog),log4j,log4net,nlog,log4cxx,log4php,Log4j,Log4net,Nlog,Log4cxx,Log4php,在某些应用程序中,无论当前的日志级别设置如何,都会有一些重要的消息需要记录(例如应用程序启动和关闭)。确保使用诸如log4j和log4net等框架记录重要消息的唯一方法是将引发的消息的日志级别设置为FATAL 有没有更好的方法可以做到这一点,因为当应用程序正常启动且没有错误时,FATAL似乎是一个误导性的类别?log4net提供了关于如何登录和在何处登录的各种配置。您可以制作筛选器,并为某些消息创建特殊的附加器,以记录级别信息的某些消息。在log4X框架中,您想要做的事情是准备就绪的。请查看文档

在某些应用程序中,无论当前的日志级别设置如何,都会有一些重要的消息需要记录(例如应用程序启动和关闭)。确保使用诸如
log4j
log4net
等框架记录重要消息的唯一方法是将引发的消息的日志级别设置为
FATAL


有没有更好的方法可以做到这一点,因为当应用程序正常启动且没有错误时,
FATAL
似乎是一个误导性的类别?

log4net提供了关于如何登录和在何处登录的各种配置。您可以制作筛选器,并为某些消息创建特殊的附加器,以记录级别信息的某些消息。在log4X框架中,您想要做的事情是准备就绪的。请查看文档以了解如何执行此操作

现在,您可以在MyAllwaysLogMessages上进行筛选,以将这些消息添加到日志中。

对于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进行配置,以避免有人(un)故意更改配置文件:

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");

不,将消息日志记录设置为最高可用日志记录级别只是为了确保它们始终被记录是错误的方法

首先,定义你想要什么。例如,为什么记录应用程序的启动和停止很重要

请注意,日志记录有多种类型。通常的日志记录对开发人员在调查问题时有一定的帮助。这是调试日志记录,通常是可选的,因为如果应用程序正常工作,日志记录部分实际上并不重要。如果可用,可以通过不同的方法进行调试

另一种日志记录是审计日志记录。当用户登录或注销、更改密码或以后做其他感兴趣的事情时,可能需要登录,以便能够验证每个操作是否正确启动和完成

任何Log4X框架都应该能够支持这两种日志记录需求,但区别在于您应该以不同的方式配置它们。审计日志不允许任何消息不发送到日志附加器,但很可能附加器与调试日志不同。利用这样一个事实,即您将有多个记录器,并且可以对它们进行不同的配置

Always.log("Starting up");