我正在与Orchard CMS合作,这对我来说是更好的CMS。我想了解它是如何进行日志记录的,以及我是否可以添加自己的日志记录。我看到Orchard使用NullLogger
类,但没有用。我打开了App_Data.Logs文件夹,看到有日志文件。但是怎么样?我在代码中搜索了使用log4net替换NullLogger
的技巧(我猜这是log4net,因为日志格式和log4net.config的格式非常相似)但我还没有找到。
有人可以回答我:
谢谢,安德烈。
答案 0 :(得分:16)
Autofac模块(准确地说Orchard.Logging.LoggerModule
)处理它。基本上 - 它扫描每个依赖项并使用对适当的logger实例的引用填充类型ILogger
的所有属性。每个依赖项都有自己的记录器,其名称等于包含类的完整类型名称(包括名称空间)。
NullLogger
只是一个占位符,因此在Autofac设置属性之前访问该属性不会抛出NullReferenceException
。
扩展默认日志记录是一项相当复杂的任务,因为它涉及到三件事:
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工具为您实现(如果未实现)。