2017-06-29 79 views
0

我真的很努力地获得一个使用NLog的基本自定义目标。无法让NLog自定义目标正常工作

的Program.cs

using NLog; 
using NLog.Targets; 



namespace NLogTestConsole 
{ 
    class Program 
    { 
     private static Logger logger = null; 

     static Program() 
     { 
      logger = LogManager.GetCurrentClassLogger(); 
      Target.Register<NLogTestConsole.Gerald>("Gerald"); 
     } 

     static void Main(string[] args) 
     { 
      logger.Trace("Sample trace message"); 
      logger.Debug("Sample debug message"); 
      logger.Info("Sample informational message"); 
      logger.Warn("Sample warning message"); 
      logger.Error("Sample error message"); 
      logger.Fatal("Sample fatal error message"); 
     } 
    } 
} 

NLogCustomTarget.cs

using NLog; 
using NLog.Targets; 



namespace NLogTestConsole 
{ 

    [Target("Gerald")] 
    public sealed class Gerald : TargetWithLayout 
    { 
     public Gerald() 
     { 
      // this.Host = "localhost"; 
     } 

     //[RequiredParameter] 
     //public string Host { get; set; } 

     protected override void Write(LogEventInfo logEvent) 
     { 
      // Breakpoint here never gets hit 
      string logMessage = this.Layout.Render(logEvent); 

      System.Console.WriteLine("MYCUSTOMMSG: " + logMessage); 
     } 

     private void SendTheMessageToRemoteHost(string host, string message) 
     { 
      // TODO - write me 
     } 
    } 

} 

NLog.config

<?xml version="1.0" encoding="utf-8" ?> 
<nlog autoReload="true" 
     throwExceptions="false" 
     internalLogLevel="Off" 
     internalLogFile="c:\temp\nlog-internal.log"> 

    <!-- optional, add some variables 
     https://github.com/nlog/NLog/wiki/Configuration-file#variables --> 
    <variable name="myvar" value="myvalue"/> 

    <!-- See https://github.com/nlog/nlog/wiki/Configuration-file 
     for information on customizing logging rules and outputs. --> 
    <targets> 
    <!-- add your targets here 
      See https://github.com/nlog/NLog/wiki/Targets for possible targets. 
      See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers. --> 

    <!-- Write events to a file with the date in the filename. 
      <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log" 
       layout="${longdate} ${uppercase:${level}} ${message}" />     --> 

    <target name="logfile" type="File" fileName="file.txt" /> 
    <target name="console" type="Console" /> 
    <target name="debugger" type="Debugger"/> 
    <target name="Gerald" type="Gerald"/> 
    </targets> 

    <rules> 
    <!-- Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f" 
      <logger name="*" minlevel="Debug" writeTo="f" /> --> 

    <logger name="*" minlevel="Trace" writeTo="logfile" /> 
    <logger name="*" minlevel="Info" writeTo="console" /> 
    <logger name="*" minlevel="Trace" writeTo="debugger" /> 
    <logger name="*" minlevel="Trace" writeTo="Gerald" /> 
    </rules> 
</nlog> 

如果我注释掉 “杰拉德” 的目标我得到记录到文件,控制台,并调试输出。随着那条线,没有任何工作 我有什么问题?

谢谢,

亚当。

回答

0

启用内部日志,看看错误在C:\ TEMP \ n日志-internal.log:

​​
+1

这给了我我需要的线索。谢谢,朱利安。在对Target.Register的调用之后,显然需要创建记录器*。 –