问题描述
我正在尝试将NLog(3.1)与Windsor Castle Facility一起使用,但是它对我不起作用(没有错误,没有任何反应)
I'm trying to use NLog (3.1) with Windsor Castle Facility, but it's not working for me (no errors, nothing happens)
这是我到目前为止的步骤:
These are my steps so far:
- 从Nuget下载:Castle Windsor NLog集成
- 从Nuget下载:NLog配置
-
像这样更新nlog配置:
- Downloaded from Nuget: Castle Windsor NLog integration
- Downloaded from Nuget: NLog Configuration
Updates nlog config like this:
<target xsi:type="File" name="f" fileName="d:\nlog.log"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
<logger name="*" minlevel="Trace" writeTo="f" />
添加了Windsor安装程序
Added Windsor Installer
public class LoggingInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.NLog).WithConfig("NLog.config"));
}
}
我正在调用它(我检查了其中的一个断点.
Which I'm calling it (I've checked that a breakpoint in there is being hit.
添加了记录器类,如下所示:
Added the logger class like this:
namespace WebApi.App_Start
{
public class MyLogger
{
private ILogger logger = NullLogger.Instance;
public ILogger Logger
{
get { return logger; }
set { logger = value; }
}
}
}
在像这样的控制器中使用它:
Using it in a controller like this:
new MyLogger().Logger.Info("New Request Created.");
但是我看不到文件创建.
But I don't see the file created.
缺少任何步骤吗?
先谢谢了.吉列尔莫.
推荐答案
您需要将Logger
属性放到要记录某些内容的每个类中,并且该类的实例必须由Windsor创建/管理.
You need to put the Logger
property to every class where you want to log something and the instances of the class has to be created/managed by Windsor.
因此您需要将其添加到您的控制器中:
So you need to add it to your controller:
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
一起使用,因为该类不是由Windsor管理/创建的,因此不会注入您的Logger
属性.但是,由于控制器对等是由Windsor创建的,并且ILogger
inejtion正在其中起作用:温莎教程-第五部分-添加日志记录支持
It was not working with the MyLogger
because that class was not managed/created by Windsor so it was not injected your Logger
property. But because the controller isntances are created by Windsor and ILogger
inejtion is wokring in them: Windsor Tutorial - Part Five - Adding logging support
这篇关于Nlog 3.1与温莎城堡不记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!