2010-04-12 73 views
5

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

  1. 日志如何影响性能?是否有可能/可推荐使用异步调用进行日志记录?
  2. 更好地使用文本文件或数据库吗?有没有可能做到这一点?例如,默认登录到数据库,如果失败,则切换到文本文件。
  3. 多线程怎么办?当我使用log4net时,我应该关心同步吗?或者它是线程安全的开箱即用?

在需求显示,应用程序应该缓存每个请求的一些事情,我害怕性能的影响。

干杯。

回答

13
  1. 它使事情变慢 - 做事比无所事事需要更多的时间。通常可以忽略不计。不要担心。
  2. 登录到文本文件imo。他们很容易移动/ grep /压缩/邮件等,你不必担心登录到数据库数据库关闭的事实。如果你需要,登录到log4net的数据库的appender。
  3. Yes,log4net是线程安全的。

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

不要担心性能,直到它成为一个问题。这并不像你正在制造月球火箭,而是想通过测试来看看它能承载多少重量 - 它只是代码,删除日志溢出你的日志并重新编译,如果它成为一个问题。

4

我会说你在担心性能早期在一块,使用log4net的方式,很容易关闭以后或定制(例如:使用conf文件,定义日志级别NONE,ERROR,WARN ,调试,信息,所有,VERBOSE等),

然而,你的两个其他问题是有效的,对于问题2,我会去纯文件,因为他们可以很容易地读取和访问而不是数据库。写入文件结尾的性能也比数据库好。

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

一个一般性的建议,如果你的项目很大,并且你希望有如上所述的可配置日志级别的任何希望,那么你真的需要就你的团队中的编码标准达成一致,登录不同级别。

3

我完全同意hhafez和nos所说的。您将使用日志记录包而不是试图推出自己的产品。这是更清洁,更容易得到正确的。记录到文本文件比管理数据库记录更容易管理长期(典型的项目技能集),但如果您计划对报告数据进行任何复杂的分析,有时只需将其存储在数据库中就更容易了。

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

在大多数文本文件记录的情况下,性能不应该成为问题。数据库日志记录有点棘手。做一个插入只比附加到文本文件稍强一点,但是它是每单位时间的量,这使得它在规模上更加丑陋。另外,如果你打算做任何离线日志分析,你应该选择一个易于扩展的日志文件格式,如果你需要在日志中添加内容,不需要对分析代码进行巨大的修改。远离嵌套的多部分消息结构。解析这些会变得很痛苦。

祝你好运!