gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:44 24 4
gpt4 key购买 nike

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

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

典型例子:

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

留言服务
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 所说的那样,检查并分析打印“不必要”日志消息的应用程序的业务规则。

案件结案!感谢大家的宝贵意见和好的建议。

最佳答案

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 - 关于应用程序日志级别的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com