Turalllb Asked:2020-01-10 06:20:39 +0000 UTC2020-01-10 06:20:39 +0000 UTC 2020-01-10 06:20:39 +0000 UTC 关于在java中登录 772 在Apache Commons Logging library一文中Habré上给出了(不知道这个库是什么意思,没用过)和一个注释: 对于System.out.println日志的输出,新手程序员经过一个星期的培训,应该砍掉自己的手。 所以问题是:为什么print这么糟糕? PS 我自己对这门语言的基础了解很差。 java 2 个回答 Voted Best Answer etki 2020-01-10T06:56:40Z2020-01-10T06:56:40Z 日志记录仍然不仅仅是将字符串输出到控制台。此处出现以下选项: 目标:它可以是一个控制台(stdout),一个稍微不同的控制台(stderr),一个文件,一个远程日志服务器 日志级别:对于不同的输出,可能会有不同的输出级别:例如我们将所有内容转储到一个文件中,但只存储最后十兆字节,而对于另一个我们只发送 WARN 级别及以上级别的消息,但我们存储过去六个月的历史 每包设置:如果代码的特定部分是“顽皮的”,您可以仅为它启用日志记录 日志轮转:日志最常需要存放在需要定期清理的文件中,同时在工作期间不断写入日志 执行上下文:往往只是一条消息是不够的(如果交易失败,是什么输入参数造成的?),所以有了MDC之类的东西,这样在处理特定用户时,在你的每条消息之前添加一个映射{processed user id: 12345} 参数替换:写Logger.debug("Transaction #{} has failed with message '{}'", transaction.getId(), e.getMessage())比写方便多了System.out.ptintln("Transaction #" + transaction.getId() + " has failed with message '" + e.getMessage() + "'")。除了方便之外,如果日志记录级别高于消息本身(即在 INFO 级别,具有 DEBUG 级别的消息不会在连接时浪费资源),这允许您不连接字符串,并且根据模板对日志消息进行分组(在日志中搜索而不只是搜索“交易”特定模板)。 日志库完成了所有这些,当您需要从一种模型切换到另一种模型时,它会大大简化生活,例如,当在应用程序附近存储日志变得不合适时,切换到远程服务器,只需连接一个新的 appender 和重新启动应用程序。此外,还有一种情况是日志太多以至于 I/O 没有时间处理 - 通常,此类问题在出现之前不会被考虑,并且在库中(我希望)一些已经采取了谨慎的步骤(例如,默认情况下,logback 肯定会尝试添加消息五次,以防出现问题)。 Ksenia 2020-01-10T20:45:32Z2020-01-10T20:45:32Z 其实上面都已经说了,我再补充一个实际的方面。控制台具有一定的容量。并且,例如,如果它等于 300 行,那么如果向其中写入 500 行,您将不再看到最初的 200 行。当然,您可以增加控制台缓冲区的大小,但是您必须不断增加它,这不是最好的选择。尤其是大型项目,几乎是连续写入日志,记录的数据量很大。
日志记录仍然不仅仅是将字符串输出到控制台。此处出现以下选项:
{processed user id: 12345}Logger.debug("Transaction #{} has failed with message '{}'", transaction.getId(), e.getMessage())比写方便多了System.out.ptintln("Transaction #" + transaction.getId() + " has failed with message '" + e.getMessage() + "'")。除了方便之外,如果日志记录级别高于消息本身(即在 INFO 级别,具有 DEBUG 级别的消息不会在连接时浪费资源),这允许您不连接字符串,并且根据模板对日志消息进行分组(在日志中搜索而不只是搜索“交易”特定模板)。日志库完成了所有这些,当您需要从一种模型切换到另一种模型时,它会大大简化生活,例如,当在应用程序附近存储日志变得不合适时,切换到远程服务器,只需连接一个新的 appender 和重新启动应用程序。此外,还有一种情况是日志太多以至于 I/O 没有时间处理 - 通常,此类问题在出现之前不会被考虑,并且在库中(我希望)一些已经采取了谨慎的步骤(例如,默认情况下,logback 肯定会尝试添加消息五次,以防出现问题)。
其实上面都已经说了,我再补充一个实际的方面。控制台具有一定的容量。并且,例如,如果它等于 300 行,那么如果向其中写入 500 行,您将不再看到最初的 200 行。当然,您可以增加控制台缓冲区的大小,但是您必须不断增加它,这不是最好的选择。尤其是大型项目,几乎是连续写入日志,记录的数据量很大。