首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NServiceBus 3中使用NLog

在NServiceBus 3中使用NLog
EN

Stack Overflow用户
提问于 2012-03-12 11:36:31
回答 2查看 1.1K关注 0票数 5

是否可以将NServiceBus3日志发送到NLog?如果是这样的话,有谁有任何关于如何做到这一点的例子吗?

编辑:解决方案

如果有人感兴趣,这里是我的附加器的实现,一些log4net级别可能没有映射到合理的NLog区域,但它至少应该给其他人一个起点

代码语言:javascript
复制
// 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);
            }
        }
    }

下面是我如何在NServiceBus中对其进行封装

代码语言:javascript
复制
.Log4Net<NlogAppenderForLog4Net>(a => { })
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 20:56:43

无需派生,您就可以为Log4Net创建自己的附加器,以重定向到NLog。Here中有更多关于登录NSB的详细信息。

票数 1
EN

Stack Overflow用户

发布于 2012-03-20 23:25:15

有一些现有的NLogAppender实现,您可以使用...例如,log4net.NLogAppender既可以在GitHub:找到,也可以从NuGet安装。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9661453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档