我目前正在一个大型项目中工作,其中有很多相互通信的应用程序。
我和我的团队通过必要的错误修复和更改请求来管理和调整系统中的应用程序。该系统被大量使用,应用程序使用大量日志记录。
典型例子:
消息客户端
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!");
}
}
消息服务
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
,并且只保留error
级别,以便日志文件只包含需要注意的意外错误,而不是其他。
其他开发人员不喜欢这个想法,因为他们在查看日志文件以查找错误和错误时不知道如何遵循“应用程序流程”。
我理解这些论点,我觉得我需要社区的一些意见。
那么,这里的最佳实践是什么?我们应该在生产环境中使用 info/warn 日志级别还是应该只使用错误日志记录?或者两者兼而有之?
谢谢!
更新:应用程序在多台服务器上运行,我们目前将所有内容记录到文件中(通常每个应用程序有一个日志文件,带有RollingFileAppender)。开始记录到数据库的工作量很大,所以这不是一个选项。
结论: 日志记录并非完全无关紧要。我们不会关闭信息和警告级别(这是一个非常激烈的操作),而是就像@jgauffin 所说的那样,检查并分析打印“不必要”日志消息的应用程序的业务规则。
结案!感谢大家的大力投入和良好的建议。