Я использую Nlog в своем приложении EPiServer, и он не регистрируется

Я использую NLog для регистрации исключений в своем приложении EPiserver. Я использовал этот блог в качестве ссылка, и мое приложение ничего не регистрирует.

Я создал класс приложения моста NLog и настроил EPiServerLog.config и NLog.config:

Класс NLogBridgeAppender:

using System;
using System.Collections.Generic;
using log4net.Appender;
using log4net.Config;
using log4net.Core;
using NLog;

namespace Tietgen.Web.Business.Core
{
    public class NLogBridgeAppender : AppenderSkeleton
    {
        Dictionary<string, Logger> _loggers = new Dictionary<string, Logger>();
        readonly object _lockObject = new object();

        public static void Initialize()
        {
            BasicConfigurator.Configure(new NLogBridgeAppender());
        }

        protected override void Append(LoggingEvent loggingEvent)
        {
            var nLogEvent = ToNLog(loggingEvent);
            var nLogger = GetLogger(loggingEvent);
            nLogger.Log(nLogEvent);
        }

        Logger GetLogger(LoggingEvent loggingEvent)
        {
            Logger nLogger;
            if (_loggers.TryGetValue(loggingEvent.LoggerName, out nLogger))
            {
                return nLogger;
            }

            lock (_lockObject)
            {
                if (_loggers.TryGetValue(loggingEvent.LoggerName, out nLogger))
                {
                    return nLogger;
                }
                nLogger = LogManager.GetLogger(loggingEvent.LoggerName);
                _loggers = new Dictionary<string, Logger>(_loggers)
          {
            { loggingEvent.LoggerName, nLogger }
          };
            }
            return nLogger;
        }

        private static LogLevel ToNLogLevel(Level level)
        {
            LogLevel nLevel;

            if (level == Level.Fatal) nLevel = LogLevel.Fatal;
            else if (level == Level.Error) nLevel = LogLevel.Error;
            else if (level == Level.Warn) nLevel = LogLevel.Warn;
            else if (level == Level.Debug) nLevel = LogLevel.Debug;
            else if (level == Level.Info) nLevel = LogLevel.Info;
            else if (level == Level.Trace) nLevel = LogLevel.Trace;
            else if (level == Level.Off) nLevel = LogLevel.Off;
            else
            {
                var message = string.Format("Unsupported log level: {0}.", level);
                throw new NotSupportedException(message);
            }

            return nLevel;
        }

        private static LogEventInfo ToNLog(LoggingEvent loggingEvent)
        {
            return new LogEventInfo
            {
                Exception = loggingEvent.ExceptionObject,
                LoggerName = loggingEvent.LoggerName,
                Message = Convert.ToString(loggingEvent.MessageObject),
                Level = ToNLogLevel(loggingEvent.Level),
                TimeStamp = loggingEvent.TimeStamp,
                FormatProvider = null
            };
        }
    }
}

NLog.config:

<!-- 
See https://github.com/nlog/nlog/wiki/Configuration-file 
for information on customizing logging rules and outputs.
 -->
<targets>      
  <target xdt:Transform="Insert" xsi:type="File" name="AllFile" fileName="${basedir}/Logs/All.${shortdate}.log" layout="[${longdate}][${uppercase:${level}}][${logger}] ${message} ${exception:format=ToString,StackTrace}" />
  <target xdt:Transform="Insert" xsi:type="File" name="TietgenFile" fileName="${basedir}/Logs/Tietgen.Web.${shortdate}.log" layout="[${longdate}][${uppercase:${level}}][${logger}] ${message} ${exception:format=ToString,StackTrace}" />          
</targets>

<rules>      
  <logger xdt:Transform="Insert" name="*" minlevel="Warn" writeTo="AllFile" />
  <logger xdt:Transform="Insert" name="Tietgen.Web" writeTo="TietgenFile" minlevel="Warn" />        
</rules>

EPiServerLog.config:

<appender xdt:Transform="Remove"
            xdt:Locator="Match(name)"
            name="errorFileLogAppender" />
<appender xdt:Transform="Remove"
            xdt:Locator="Match(name)"
            name="outputDebugStringAppender" />

<appender xdt:Transform="Insert"
            xdt:Locator="Match(name)"
            name="NLogBridgeAppender"
            type="Tietgen.Web.Business.Core.NLogBridgeAppender, Tietgen.Web.Business.Core">
  <encoding value="utf-8" />
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="Tietgen.Web" />
    <acceptOnMatch value="false" />
  </filter>
</appender>

<logger xdt:Transform="Replace"
          xdt:Locator="Match(name)"
          name="EPiServer.Core.OptimisticCache"
          additivity="false">
  <level value="Error" />
  <appender-ref ref="NLogBridgeAppender" />
</logger>
<logger xdt:Transform="Replace"
          xdt:Locator="Match(name)"
          name="EPiServer.Core.ContentProvider"
          additivity="false">
  <level value="Error" />
  <appender-ref ref="NLogBridgeAppender" />
</logger>
<logger xdt:Transform="Replace"
          xdt:Locator="Match(name)"
          name="EPiServer.Data.Dynamic.Providers.DbDataStoreProvider"
          additivity="false">
  <level value="Error" />
  <appender-ref ref="NLogBridgeAppender" />
</logger>
<logger xdt:Transform="Replace"
          xdt:Locator="Match(name)"
          name="EPiServer.Data.Providers.SqlDatabaseHandler"
          additivity="false">
  <level value="Error" />
  <appender-ref ref="NLogBridgeAppender" />
</logger>
<logger xdt:Transform="Replace"
          xdt:Locator="Match(name)"
          name="EPiServer.Data.Providers.ConnectionContext"
          additivity="false">
  <level value="Error" />
  <appender-ref ref="NLogBridgeAppender" />
</logger>

<root xdt:Transform="Replace">
  <level value="Warn" />
  <appender-ref ref="NLogBridgeAppender" />
</root>


person Jen    schedule 11.09.2014    source источник


Ответы (1)


Хорошо, я закончил тем, что использовал только log4net в нашем веб-приложении, чтобы выполнить работу.

person Jen    schedule 15.09.2014