2

应该使用哪个日志级别,是org.slf4j.logger.Logger.trace or debug用于记录低级别开发人员日志吗?

4

5 回答 5

2

这是一个描述日志级别的好列表:

  • 调试 这是最详细的日志记录级别(最大音量设置)。我通常认为 Debug 对于生产系统来说是越界的,并且仅将其用于开发和测试。我更喜欢将我的日志记录级别设置得恰到好处,这样我就有足够的信息,并努力将其记录在信息级别或更高级别。

  • 信息 信息级别通常用于输出对系统运行和管理有用的信息。信息也将是用于记录应用程序关键区域的入口和出口点的级别。但是,您可以选择在调试级别添加更多入口和出口点,以便在开发和测试期间获得更多粒度。

  • 警告 警告通常用于处理的“异常”或其他重要的日志事件。例如,如果您的应用程序需要配置设置,但在缺少设置的情况下具有默认设置,则应使用警告级别来记录缺少的配置设置。

  • Error 错误用于记录所有未处理的异常。这通常记录在应用程序边界的 catch 块中。

  • Fatal Fatal 保留用于特殊例外/情况,您必须快速找出这些事件。我通常不希望在应用程序开发的早期使用 Fatal。通常只有通过经验,我才能确定值得 FATAL 绰号体验的情况,特定事件是否值得晋升为 Fatal。毕竟,错误就是错误。

来自http://thejoyofcode.com/Logging_Levels_and_how_to_use_them.aspx

于 2012-04-12T08:49:42.790 回答
1

取决于开发人员日志的含义。如果你的意思是调试信息,显然DEBUG应该使用。

人们倾向于使用TRACE极细粒度的日志,例如方法入口、方法出口等,如果启用,这些日志文件会乱扔垃圾。

这种方法可能会给你一个例子。

public String fetchMessage(long id) {
    logger.entry(id);

    logger.debug("Retrieving message from database");

    String message = this.messageService.fetchMessageById(id);

    logger.exit(message);
}
于 2012-04-12T08:46:03.117 回答
1

日志对于调试和故障排除非常重要。记录所有必需的信息是件好事。但是,过多的日志记录也可能会影响性能,例如编写长 XML 消息或类似的东西。

这就是为什么有不同级别可用于记录的原因。需要为信息种类选择合适的级别。

例如,在 catch 块中有错误级别的日志。

catch (Exception e) {
   log.error("Exception... information.");
}

一些明显的信息一直需要。
log.info("日志信息"); //基本信息-始终开启

调试级别信息
log.debug("调试值..."); //可以在需要时打开此级别。

它将避免过多的日志记录。

拇指规则:- 永远不要在日志中记录敏感信息。

于 2012-04-12T09:04:45.837 回答
0

这取决于您当地的工作流程以及您的工作方式。

我们的经验法则是 INFO 始终打开,DEBUG 会在需要进行取证分析时记录在生产环境中,但 TRACE 不会记录在开发人员机器之外。

这意味着,如果您需要有可用的信息进行调查,请在调试时将其记录下来。如果没有,请将其记录在 trace 中。

于 2012-04-12T08:46:58.967 回答
0

实际上没有“开发者日志”和“用户日志”。每个包都应该包含一些独立的 API,有自己的概念和层

您所说的“开发者日志”可能是应用程序“内核”的子部分,而您所说的“用户日志”可能是“命令行”或“UI”部分。

每个包都应独立考虑,并具有自己的对象模型和业务规则。在这个宇宙中,您通常在顶层有一个“公共”部分,它处理用例的基本步骤。您还有一个用于扩展功能的“受保护”部分和一个用于满足您内部需求的“私有”部分。这些可以以分层方式存储在不同的 * java 包* 中。您的日志记录实践可能应该基于此层方案。

好的做法是使用诸如java.logginglog4j之类的 API ......它允许您基于包名称登录。

INFO应该是基本的高级步骤,这意味着在你的包顶层的公共方法中发生了什么。

DEBUG应该是更细的粒度,仍然不会影响性能。

TRACE应该用于可能导致性能问题的非常详细的日志。请记住始终将 trace() 调用包装在 if(level==TRACE) 中,这样您就不会执行一些无用的构建消息的任务......等等。

可以处理异常时发出警告。

未处理异常但未导致关闭主线程时出现ERR 。

FATAL当我不得不终止整个过程时。

祝你好运!

雷诺

于 2012-04-13T08:47:10.410 回答