Using NLog with NServiceBus 3

Can I run the NServiceBus3 log in NLog? and if anyone has examples of how to do this?

EDIT: Solution

If someone is interested in my implementation of the application, some of the log4net levels probably do not appear in reasonable areas of NLog, but this should give other people at least a starting point.

// Setup a custom formatter like the one below to get nice exception logging
    //<target name="YourLogFile" xsi:type="File" fileName="${basedir}/../logs/YourLogFile.log" archiveFileName="${basedir}/../logs/archives/YourLogFile.{#####}.log" 
    //layout="${longdate}|${level:uppercase=true}|${logger}|${message}${onexception:|EXCEPTION OCCURRED\:${exception:format=type,message,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method}}" 
    //archiveEvery="Day" archiveNumbering="Sequence" maxArchiveFiles="14" />
    public class NlogAppenderForLog4Net : AppenderSkeleton
    {
        protected override void Append(log4net.Core.LoggingEvent loggingEvent)
        {
            var Logger = LogManager.GetLogger(loggingEvent.LoggerName);


            if (loggingEvent.Level == Level.Fatal)
            {
                if (loggingEvent.ExceptionObject != null)
                {
                    Logger.FatalException(loggingEvent.RenderedMessage, loggingEvent.ExceptionObject);
                }
                else
                {
                    Logger.Fatal(loggingEvent.RenderedMessage);
                }
            }
            //if its an error
            else if(loggingEvent.Level == Level.Error ||
                    loggingEvent.Level == Level.Critical ||
                    loggingEvent.Level == Level.Emergency)
            {
                if(loggingEvent.ExceptionObject != null)
                {
                    Logger.ErrorException(loggingEvent.RenderedMessage, loggingEvent.ExceptionObject);
                }
                else{
                    Logger.Error(loggingEvent.RenderedMessage);
                }
            }
            //if its a warning
            else if (loggingEvent.Level == Level.Warn)
            {
                if (loggingEvent.ExceptionObject != null)
                {
                    Logger.WarnException(loggingEvent.RenderedMessage, loggingEvent.ExceptionObject);
                }
                else
                {
                    Logger.Warn(loggingEvent.RenderedMessage);
                }
            }
            //if its info
            else if (loggingEvent.Level == Level.Info || loggingEvent.Level == Level.Notice)
            {
                Logger.Info(loggingEvent.RenderedMessage);
            }
            else
            {
                Logger.Trace(loggingEvent.RenderedMessage);
            }
        }
    }

and heres how i plug it in NServiceBus

.Log4Net<NlogAppenderForLog4Net>(a => { })
+5
source share
2 answers

Without forking, you can create your own appender so that Log4Net is redirected to NLog. There is more information about registering with the NSB.

+1
source

NLogAppender, ... , log4net.NLogAppender, GitHub: NuGet.

+2

All Articles