2016-11-14 6 views
0

Ich verwende programmatische Konfiguration mit NLog und bin Begegnung mit den folgenden Fehler, wenn die Protokolldatei geschrieben werden soll:NLog Ausnahme auf Log-Datei (Unity-Projekt)

ArgumentOutOfRangeException: Argument ist außerhalb des zulässigen Bereichs. System.Security.AccessControl.AuthorizationRule..ctor (System.Security.Principal.IdentityReference Identität, Int32 AccessMask, Boolean isInherited, InheritanceFlags InheritanceFlags, PropagationFlags PropagationFlags) (bei /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Security.AccessControl/AuthorizationRule.cs: 61) System.Security.AccessControl.AccessRule..ctor (System.Security.Principal.IdentityReference Identität, Int32 AccessMask, Boolean isInherited, VererbungFlags VererbungFlags, PropagationFlags propagationFlags, AccessControlType Typ) System.Security.AccessControl.MutexAccessRule..ctor (System.Security.Principal.I dentityReference Identität, MutexRights eventRights, Access Typ) NLog.Internal.FileAppenders.BaseFileAppender.CreateSharableMutex (System.String mutexNamePrefix) NLog.Internal.FileAppenders.BaseFileAppender.CreateSharableArchiveMutex () NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender.CreateArchiveMutex () NLog.Internal.FileAppenders.BaseFileAppender..ctor (System.String Dateiname, ICreateFileParameters createParameters) NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender..ctor (System.String Dateiname, ICreateFileParameters Parameter) NLog.Internal.FileAppenders .RetryingMultiProcessFileAppender + Factory.NLog.I nternal.FileAppenders.IFileAppenderFactory.Open (System.String Dateiname, ICreateFileParameters Parameter) NLog.Internal.FileAppenders.FileAppenderCache.AllocateAppender (System.String filename) NLog.Targets.FileTarget.WriteToFile (System.String Dateiname, NLog. LogEventInfo LOGEVENT, System.Byte [] Bytes, Boolean justData) NLog.Targets.FileTarget.ProcessLogEvent (NLog.LogEventInfo LOGEVENT, System.String Dateiname, System.Byte [] bytesToWrite) NLog.Targets.FileTarget.Write (NLog .LogEventInfo LOGEVENT) NLog.Targets.Target.Write (AsyncLogEventInfo LOGEVENT)

Goog Über diesen Fehler weiß ich nichts, soweit ich das beurteilen kann. Im Folgenden ist meine Konfigurationscode:

public static void SetupLogging() 
    { 
     // Can unity debug be redirected to go through Nlog? 
     var config = new LoggingConfiguration(); 
     var consoleTarget = new ConsoleTarget("console"); 
     config.AddTarget("console", consoleTarget); 

     //var logsPath = UtilsIO.GetResourcesPath(UtilsIO.ResourceType.Logs, "_logs"); 
     var logsPath = @"d:\jem\temp\_logs"; 
     var dir = logsPath + "\\app" + "\\" + Environment.UserName; 
     if (!Directory.Exists(dir)) 
     { 
      Directory.CreateDirectory(dir); 
     } 

     var filepath = Path.Combine(dir, Guid.NewGuid() + ".log"); 
     var fileTarget = new FileTarget("file") 
     { 
      FileName = filepath, 
      Layout = "${date:format=yyyyMMddHHmmss} ${message}" 
     }; 
     config.AddTarget("file", fileTarget); 

     var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget); 
     config.LoggingRules.Add(rule1); 

     var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget); 
     config.LoggingRules.Add(rule2); 

     InternalLogger.LogToConsole = true; 

     LogManager.ThrowExceptions = true; 
     LogManager.Configuration = config; 
    } 

Dies ist, wie ich den Logger instanziiert:

private static NLog.Logger logger = LogManager.GetLogger("file");

Und das ist, wie ich, dass Instantiierung:

logger.Debug("Hello world????"); 

Ich habe versucht, die ImpersonatingTargetWrapper verwenden, aber den gleichen Fehler erhalten. Ich habe 'Jeder' volle Rechte für das Root-Verzeichnis gegeben. Ich habe auch versucht, Konfigurationsdatei zu starten, aber das hat auch nicht geholfen. Ich habe meinen Kopf für eine Weile gegen diesen hier geschlagen - jeder hat irgendwelche Vorschläge?

+0

Versuchen Sie, den Pfad und den Dateinamen direkt zu codieren. Kann ein Problem mit dem Dateinamen sein – GreatJobBob

+0

Es ist im Grunde hart codiert - aber, anstatt eine Guid.New - Ich habe gerade versucht mit einer "Datei-log.log" und bekomme den gleichen Fehler. Ich habe auch versucht, Path.GetTempPath() zu verwenden, und ich bekomme den gleichen Fehler. – jeromeyers

+0

Welche Plattform und NLog Version? Sieh diesen Fehler vorher in Xamarin soweit ich mich erinnere. – Julian

Antwort

1

NLog 4.4.1 führt jetzt die Laufzeiterkennung der MONO-Version durch und vermeidet die Verwendung des benannten Mutex, wenn MONO nicht ausgeführt wird. 4 oder neuer (Unity läuft MONO ver.2)