Orchard CMS如何进行日志记录?

时间:2012-02-10 08:47:48

标签: asp.net asp.net-mvc logging log4net orchardcms

我正在与Orchard CMS合作,这对我来说是更好的CMS。我想了解它是如何进行日志记录的,以及我是否可以添加自己的日志记录。我看到Orchard使用NullLogger类,但没有用。我打开了App_Data.Logs文件夹,看到有日志文件。但是怎么样?我在代码中搜索了使用log4net替换NullLogger的技巧(我猜这是log4net,因为日志格式和log4net.config的格式非常相似)但我还没有找到。 有人可以回答我:

  1. Orchard如何进行伐木?
  2. 我是否可以添加自己的记录器,如果是,还有哪些最佳实践可以做到这一点?
  3. 谢谢,安德烈。

2 个答案:

答案 0 :(得分:16)

Autofac模块(准确地说Orchard.Logging.LoggerModule)处理它。基本上 - 它扫描每个依赖项并使用对适当的logger实例的引用填充类型ILogger的所有属性。每个依赖项都有自己的记录器,其名称等于包含类的完整类型名称(包括名称空间)

NullLogger只是一个占位符,因此在Autofac设置属性之前访问该属性不会抛出NullReferenceException

扩展默认日志记录是一项相当复杂的任务,因为它涉及到三件事:

  • 创建ILoggerFactory的自定义实现(就像默认的Orchard.Logging.CastleLoggerFactory)和
  • 创建一个Autofac模块,在容器中注册该实现(如上面提到的LoggerModule那样)
  • 取消当前的默认日志记录模块,方法是使用[OrchardSuppressDependency("Orchard.Logging.LoggingModule")]
  • 修改新的日志记录模块

<强>更新

刚才意识到我没有在这里解决问题中最重要的部分:) 是的, Orchard使用log4net ,因此您可以通过 Config / log4net.config 文件更改默认设置。

答案 1 :(得分:1)

有一篇关于Orchard Logging如何工作的精彩文章。 (我不确定是否可以复制并粘贴整篇文章)。这是链接:Injection Logger in Orchard

所以诀窍是:

  

每当一个类需要一个Logger实例时,它需要做的就是   声明一个ILogger属性,就是这样。后来,在你的班上,你   可以随时使用此属性进行日志记录

这是怎么做到的?

  

当Orchard Web应用程序启动时,将使用OrchardStarter   做大部分的注册工作。

简而言之,它会查看所有项目中的所有代码,获取所有使用ILogger属性的类,并使用Castle的logger工具为您实现(如果未实现)。