Nlog 3.1 与温莎城堡不记录

本文关键字:城堡 记录 Nlog | 更新日期: 2023-09-27 18:34:45

我正在尝试将 NLog (3.1( 与温莎城堡设施一起使用,但它对我不起作用(没有错误,没有任何反应(

这些是我到目前为止的步骤:

  1. 从Nuget下载:Castle Windsor NLog 集成
  2. 从Nuget下载:NLog配置
  3. 像这样更新 nlog 配置:

    <target xsi:type="File" name="f" fileName="d:'nlog.log"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
    

    <logger name="*" minlevel="Trace" writeTo="f" />
    

  4. 添加了温莎安装程序

     public class LoggingInstaller : IWindsorInstaller
     {
            public void Install(IWindsorContainer container, IConfigurationStore store)
            {
                container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.NLog).WithConfig("NLog.config"));
            }
    }
    

    我称之为(我已经检查了那里的断点是否被命中。

  5. 添加了记录器类,如下所示:

    namespace WebApi.App_Start
    {
        public class MyLogger
        {
            private ILogger logger = NullLogger.Instance;
            public ILogger Logger
            {
                get { return logger; }
                 set { logger = value; }
            }
        }
    }
    
  6. 在像这样的控制器中使用它:

    new MyLogger().Logger.Info("New Request Created.");
    

但是我没有看到创建的文件。

缺少任何步骤?

提前谢谢。吉列尔莫。

Nlog 3.1 与温莎城堡不记录

您需要将Logger属性放入要记录某些内容的每个类中,并且该类的实例必须由Windsor创建/管理。

因此,您需要将其添加到控制器中:

public class MyController : Controller
{
    private ILogger logger = NullLogger.Instance;
    public ILogger Logger
    {
        get { return logger; }
        set { logger = value; }
    }
    public ActionResult MyAction() 
    {
         Logger.Info("New Request Created.");
    }
}

它不适用于MyLogger,因为该类不是由温莎管理/创建的,因此它没有注入您的Logger属性。但是因为控制器是由温莎创建的,并且ILogger其中存在不可分割性: 温莎教程 - 第五部分 - 添加日志记录支持