我正在开发一个必须支持大量同步请求的Web应用程序,并且我希望保持足够快。我现在要实现一个日志记录策略,我将使用log4net,但是...我应该记录什么以及如何记录?我的意思是:
在要求中,应用程序应该为每个请求缓存一些内容,而且我担心它会对性能产生影响。
干杯。
答案 0 :(得分:14)
记录/跟踪非常有价值 - 至少你应该记录错误,或者你永远不会知道它们。大多数日志记录apis允许您打开和关闭您需要记录的详细信息。
在成为问题之前不要担心性能。这并不像你正在构建月球火箭,并希望通过测试它来看看它能携带多少重量 - 它只是代码,删除日志中的日志记录并重新编译,如果它成为一个问题。
答案 1 :(得分:4)
我会说你早期担心性能问题,使用log4net以后很容易关闭或自定义(例如:使用定义日志级别为NONE,ERROR,WARN的conf文件)调试,信息,全部,VERBOSE等......),
但是你的另外两个问题是有效的,对于问题2,我会选择普通文件,因为它们可以很容易地读取和访问而不是数据库。写入文件末尾的性能也优于db。
是的,因为nos已经声明log4net是线程安全的。
一条一般建议,如果您的项目规模很大,并且您希望拥有如上所述的可配置日志级别,那么您真的需要就团队内部的编码标准达成一致意见在不同的层面。
答案 2 :(得分:3)
我完全赞同hhafez和nos所说的话。您正在使用日志包而不是尝试滚动自己的路径。它更干净,更容易做对。与DB记录相比,记录到文本文件更容易管理长期(给定典型的项目技能集),但如果您计划对报告的数据进行任何复杂的分析,有时将其放在数据库中会更容易。
如果调试是您实现日志记录解决方案的既定目标之一,那么您必须事先标准化所有日志级别,并使代码审查过程成为您的一部分。在粒度方面有足够的差异,以便您可以通过进入下一级别逐步增加报告的深度。对PROD问题进行故障排除是非常令人沮丧的,没有足够的日志信息来查看问题,然后增加到下一级别的日志记录并使用如此多的喷射完全淹没日志,以至于您无法看到森林中的树木(以及由于音量,您的日志每5分钟滚动一次)。我见过它。
在大多数文本文件记录的情况下,性能应该不是问题。 DB日志记录有点棘手。插入操作只比附加到文本文件稍微强一些,但它是每单位时间的体积,这使得它在规模上更加丑陋。
此外,如果您要进行任何离线日志分析,您应该选择一种易于扩展的日志文件格式,如果您需要向日志添加内容,则不需要对分析代码进行大量更改。远离嵌套的多部分消息结构。解析那些会变得很痛苦。
祝你好运!