2014-09-11 51 views
0

我正在使用NLog在我的EPiserver应用程序中记录异常。我用这个blog作为参考,我的应用程序不记录任何东西。我在我的EPiServer应用程序中使用Nlog并且它不记录

我创建了一个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> 

回答

0

好吧,我结束了在我们的web应用程序单独使用log4net的,以完成这项工作。

相关问题