繁体   English   中英

记录策略与性能

[英]Logging strategy vs. performance

我正在开发一个必须支持大量同步请求的Web应用程序,并且我希望保持足够快。 我现在要实现一个日志记录策略,我将使用log4net,但是...我应该记录什么以及如何记录? 我的意思是:

  1. 日志记录如何影响性能? 是否可以使用异步调用进行/ recomendable日志记录?
  2. 最好使用文本文件还是数据库? 有可能有条件吗? 例如,默认日志记录到数据库,如果失败,则切换到文本文件。
  3. 多线程怎么样? 我使用log4net时应该关心同步吗? 或者它是开箱即用的线程安全?

在需求中,应用程序应该为每个请求缓存一些内容,而且我担心它会对性能产生影响。

干杯。

  1. 它让事情变得更慢 - 做一些事情比无所事事花费更多时间。 通常可以忽略不计。 别担心。
  2. 登录到文本文件imo。 它们易于移动/ grep /压缩/邮件等,您不必担心数据库已关闭这一事实会记录到数据库。 如果你需要,可以使用登录到log4net数据库的附加程序。
  3. 是的 ,log4net是线程安全的。

记录/跟踪非常有价值 - 至少你应该记录错误,或者你永远不会知道它们。 大多数日志记录apis允许您打开和关闭您需要记录的详细程度。

在成为问题之前不要担心性能。 这不像是你正在构建月球火箭,并希望通过测试来看看它能承载多少重量 - 它只是代码,删除日志中的日志记录并重新编译它是否成为问题。

我会说你在早期的作品中担心性能,使用log4net以后很容易关闭或自定义(例如:使用定义日志级别NONE,ERROR,WARN,DEBUG,INFO的conf文件) ,ALL,VERBOSE等......),

但是你的另外两个问题是有效的,对于问题2,我会选择普通文件,因为它们可以很容易地读取和访问而不是数据库。 写入文件末尾的性能也优于db。

是的,因为nos已经声明log4net是线程安全的。

一条通用建议,如果您的项目很大,并且您希望有如上所述的可配置日志级别的希望,那么您真的需要在团队中就不同级别的日志记录达成一致的编码标准。

我完全赞同hhafez和nos所说的话。 您正在使用日志包而不是尝试滚动自己的路径。 它更干净,更容易做对。 记录到文本文件比使用DB记录更容易管理长期(给定典型的项目技能集),但是如果您计划对报告的数据进行任何复杂的分析,有时将其放在数据库中会更容易。

如果调试是您实现日志记录解决方案的既定目标之一,那么您必须事先标准化所有日志级别并使代码审查过程成为您的一部分。 在粒度方面有足够的差异,以便您可以通过进入下一级别逐步增加报告的深度。 对PROD问题进行故障排除是非常令人沮丧的,没有足够的日志信息来查看问题,然后增加到下一级别的日志记录并使用如此多的喷射完全淹没日志,以至于您无法看到森林中的树木(以及由于音量,您的日志每5分钟滚动一次)。 我已经看到它发生了。

在大多数文本文件记录的情况下,性能应该不是问题。 DB日志记录有点棘手。 执行插入操作只比附加到文本文件稍微强一些,但它是每单位时间的体积使其在规模上更加丑陋。

此外,如果您要进行任何离线日志分析,您应该选择一种易于扩展的日志文件格式,如果您需要在日志中添加内容,则不需要对分析代码进行大量更改。 远离嵌套的多部分消息结构。 解析那些会变得很痛苦。

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM