2

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

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

4

3 回答 3

2

对于 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");
于 2013-01-18T10:31:43.723 回答
1

log4net 提供了关于如何记录和记录在哪里的各种配置。您可以对某些消息进行过滤器和特殊的附加程序来记录级别信息的一些消息。您想要做的事情在 log4X 框架中已经成为可能。查看文档以了解如何执行此操作。

log4net 手册

ILog log = LogManager.GetLogger("MyAllwaysLogMessages");
log.Info(....

现在您可以过滤 MyAllwaysLogMessages 以将它们添加到您的日志中。

于 2013-01-18T10:29:34.950 回答
0

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

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

请注意,有多种日志记录。在调查出了什么问题时,通常的日志记录是对开发人员的某种帮助。这是调试日志,它通常是可选的,因为如果应用程序工作与否,它对于日志部分并不重要。如果可用,可以通过不同的方式进行调试。

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

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

于 2013-01-20T16:03:51.997 回答