【问题标题】:Log4Net in Asp.Net Correct ImplementationAsp.Net中的Log4Net正确实现
【发布时间】:2015-07-18 04:26:31
【问题描述】:

我正在尝试在 asp.net 中实现 Log4Net 文件附加程序。我已经成功地实施了它。但是我不确定实现它的正确架构。

我可以在每个页面中添加一个记录器并记录信息。但是,我正在考虑集中记录器类。可以实现单例模式。但我想知道如果对同一页面的请求来自两个不同的浏览器会发生什么。我可以实现线程静态,然后每个页面而不是初始化自己的记录器,而是使用这个集中记录器类来记录。

我认为 log4net 文件追加器或滚动文件追加器使用队列机制写入日志文件。因为只能获取文件的一个句柄来写入文件。

任何人都可以在这方面帮助我。我是否走对了路,或者当有来自不同浏览器的数十和数百个请求时,我会遇到问题。

【问题讨论】:

  • 这看起来是一个相当不错的使用 Log4Net 的方式 ..code.msdn.microsoft.com/How-to-use-Apache-log4net-0d969339
  • 这是针对 asp.net mvc 的。但我正在使用 asp.net 网络表单。您认为带有线程静态的单例模式不会引起任何问题吗?它实现了我如何实现它。通过在每个控制器中安装一个记录器。所以一个请求来了,一个记录器被创建了。因此每次请求到来时都会创建一个记录器,然后将其处理掉。
  • 感谢 sundeep!浏览完博客后,我会发布我的评论。但似乎这是要走的路

标签: asp.net logging log4net


【解决方案1】:

我建议不要使用单例,而是为要记录的每个控制器和类使用一个记录器。记录器的创建成本很低,cached by log4net - 如果您在类中将它们声明为静态,则更是如此 - 并且每个类都有一个,您可以通过在运行时更改 log4net 配置来change logging per class or namespace - 比如说启用一些调试日志记录到帮助诊断生产中的问题,或拒绝一些意外嘈杂的日志记录。如果您have your log config in a separate file,您可以在不回收应用的情况下执行此操作。

此外,如果您要使用文件日志记录,请确保使用 MinimalLock

【讨论】:

  • 非常感谢您的 cmets 很有意义。我正在寻找的回复类型。
  • 我想使用集中式类的原因是将 log4net 记录器包装在一个自定义类中,这样如果以后我想切换记录器,我就不必更改所有类中的代码。那将是很多工作。您对此有何建议?
  • 您可以wrap log4net 并在您的类中使用包装器。
  • 我做到了。但是,如果我打开它所做的位置,它会为我提供实际发生日志记录的特定单例类的位置(行号和类名等),而不是显示进行调用的位置
  • @ItsZeus 这就是你使用单例的结果。记录器名称应该告诉你类,以及调用它的上下文(即日志的内容)——无论如何,你都会在发布版本中丢失行号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2015-06-19
  • 2011-08-19
  • 1970-01-01
  • 2014-12-08
相关资源
最近更新 更多