编程语言
首页 > 编程语言> > java – 关于应用程序日志级别的建议

java – 关于应用程序日志级别的建议

作者:互联网

我目前正在一个大型项目中工作,其中包含许多相互通信的应用程序.

我和我的团队通过必要的错误修复和更改请求来管理和调整系统中的应用程序.
系统正在大量使用,应用程序使用大量日志记录.

典型例子:

MessageClient

public void save(final Message message) {
   logger.info("Trying to save message: {}", message);

   boolean result = false;
   try {         
     result = messageService.save(message);
   } catch (final MessageStoreException e) {          
      logger.warn("Unable to save message {}", message, e);
      throw e;
   } catch (final Exception e) {
      logger.error("Unknown error when trying to save message!", e);
   }

   if (!result) {
      logger.warn("Could not save the message!");
   }
}

MessageService

public boolean save(final Message message) throws MessageStoreException {  
   if (message == null) {
      throw new IllegalArgumentException("message!");
   } 

   final boolean result = messageStore.store(message);
   if (result) {
      logger.info("Stored: {}", message.getId());
   } else {
      logger.warn("Unable to store: {}", message.getId());
   }

   return result; 
}

注意:我知道示例代码没有最好的错误处理,但这就是我们管理的许多应用程序中的样子.

当然,这使得日志文件非常大.

我想在生产环境中关闭日志级别信息和日志级别警告,并且只保留错误级别,以便日志文件仅包含需要注意的意外错误,而不包含任何其他错误.

其他开发人员不喜欢这个想法,因为他们在查看搜索错误和错误的日志文件时不知道如何遵循“应用程序流”.

我理解这些论点,我觉得我需要社区的一些意见.

那么,这里的最佳做法是什么?
我们应该在生产环境中使用info / warn日志级别还是应该只使用错误日志记录?或者两者都有?

谢谢!

更新:应用程序在多个服务器上运行,我们当前将所有内容记录到文件(通常每个应用程序有一个日志文件,带有RollingFileAppender).开始记录到数据库需要做很多工作,所以这不是一个选项.

结论:
记录并非完全无足轻重.我们不会关闭信息和警告级别(这是一个非常激烈的操作),但是就像@jgauffin所说的那样,通过并分析打印“不必要”日志消息的应用程序的业务规则.

案件结案!谢谢大家的好评和好建议.

解决方法:

I would like to turn of log level info and log level warn in the production environment, and only leave the error level on, so that the logfiles only contains unexpected errors that need attention and nothing else.

The other developers do not like this idea, as they don’t know how to follow the “application flow” when they are viewing the logfiles searching for bugs and errors.

这是一个典型的问题.我们来分析一下日志:

final boolean result = messageStore.store(message);
   if (result) {
      logger.info("Stored: {}", message.getId());
   } else {
      logger.warn("Unable to store: {}", message.getId());
   }

这确实是一个问题,因为团队似乎并不确定是否可以存储消息的域规则.我很可能会说,无法存储消息确实应该是一个例外(因此应抛出异常).但话说回来,我对域/业务规则一无所知.

然而,这样的记录通常表明业务规则不清楚.因此,一个更好的解决方案可能是让团队分析为什么日志记录如此繁重.应用程序是否会产生大量维护?然后,最好删除日志记录和更多错误检查(如验证方法参数),而不是转换日志级别.

团队注意到他们无法遵循流程而没有日志记录表明相同的事情:不检查参数,以便在应用程序的早期而不是早期引入错误.

标签:java,maintenance,error-logging,logging
来源: https://codeday.me/bug/20190613/1231365.html