簡體   English   中英

NLog類過濾器無法正常工作

[英]NLog class filter not working

我使用類名過濾器配置NLog有困難。

<rules>
    <logger name="My.NameSpace.MyController" minlevel="Debug" writeTo="file" />
  </rules>

如果我指定一個完全限定的類名,它不會記錄,但如果我指定name="*"它確實有效

我正在使用Castle Windsor來設置它:

 Container.AddFacility<LoggingFacility>(f => f.UseNLog("NLog.config"));

在MyController類中進行此調用

Logger = MvcApplication.Container.Resolve<ILogger>();

還有什么我需要指定才能使其與類規則一起使用嗎?

我相信Castle Windsor用您在config中設置的代理和記錄器名稱替換您的類與實際實例類型不匹配。

你可以明確地設置日志的名稱

Logger = LogManager.GetLogger("My.NameSpace.MyController").

額外提示:在許多情況下,使用控制反轉來解析記錄器並沒有帶來很多好處,您可以避免這樣做,否則您應該在Castle Windsor中調整記錄器注冊。

如果您直接從容器中請求ILogger (例如,使用Logger = MvcApplication.Container.Resolve<ILogger>(); )Windsor將始終為您提供一個名為Default的默認ILogger

配置LoggingFacility時,可以使用ToLog方法更改此默認名稱:

container.AddFacility<LoggingFacility>(f => f.UseNLog("NLog.config")
                                             .ToLog("MyDefaultname"));

如果你想擁有“當前類記錄器”而不是默認值,那么你需要讓Windsor注入你的ILogger而不是手動解析它。

所以如果你使用構造函數注入:

public MyController
{
    private ILogger logger;

    public MyController(ILogger logger)
    {
         this.logger = logger;
    }
}

或財產注入:

public MyController
{
    public ILogger Logger { get; set; }
}

Windsor將使用正確的My.NameSpace.MyController名稱為您創建一個ILogger

如果您需要對記錄器名稱進行更精細的控制,您可以依賴/解析Castle.Core.Logging.ILoggerFactory接口,您可以使用它創建自己的ILogger

如果給定命名空間下的所有類都使用相同的目標,則可以像下面這樣配置規則:

<rules>
    <logger name="MyApp.Controllers.*" minlevel="Debug" writeTo="fileTarget1" />
    <logger name="MyApp.AnotherNamespace.*" minlevel="Debug" writeTo="fileTarget2" />
    <logger name="*" minlevel="Error" writeTo="fileTarget3" />
</rules>

如果使用每個控制器中的GetType().FullName命名記錄器(在MyApp.Controllers下),則上述配置會將調試級別(及以上)條目寫入fileTarget1 ,並將錯誤級別(及以上)寫入fileTarget1fileTarget3

在底線時, *通配符在您不知道(或關心)將使用給定日志記錄規則的類型的確切名稱時非常有用,因此在您的情況下,這適用於My.NameSpace下的所有類:

<logger name="My.NameSpace.*" minlevel="Debug" writeTo="file" />

這適用於Ninject,但就IoC而言,它只是注入了另一個依賴項,容器不知道它是一個日志助手。 因此,如果Castle生成代理並且您只需要1個目標,那么您可以使用Castle.*作為您的過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM