Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot get NLog custom target to work

Tags:

c#

nlog

I am really struggling to get a basic custom target working with 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>

If I comment out the "Gerald" target I get logging to file, console, and debug output. With that line there, nothing works What have I got wrong?

Thanks,

Adam.

like image 337
Adam Benson Avatar asked Sep 19 '25 01:09

Adam Benson


1 Answers

Enable the internal log and see the error in c:\temp\nlog-internal.log:

internalLogLevel="Warn"
like image 101
Julian Avatar answered Sep 20 '25 14:09

Julian