2016-11-14 7 views
0

Я использую программные конфигурации с NLog и я встречая следующее сообщение об ошибке, когда файл журнала должен быть записан:NLog Исключение на Вход в файл (проект Unity)

ArgumentOutOfRangeException: Аргумент находится вне диапазона. System.Security.AccessControl.AuthorizationRule..ctor (System.Security.Principal.IdentityReference идентичность, Int32 accessMask, Boolean isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) (в /Пользователи/builduser/buildslave/моно/строить/MCS/класс/corlib/System.Security.AccessControl/AuthorizationRule.cs: 61) System.Security.AccessControl.AccessRule..ctor (System.Security.Principal.IdentityReference идентичность, Int32 accessMask, булева isInherited, InheritanceFlags inheritanceFlags, Распространение распространения флаговFlags, тип AccessControlType) System.Security.AccessControl.MutexAccessRule..ctor (System.Security.Principal.I dentityReference идентичности, MutexRights eventRights, тип AccessControlType) 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 имя_файла, ICreateFileParameters createParameters) NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender..ctor (System.String имя_файла, параметры ICreateFileParameters) NLog.Internal.FileAppenders .RetryingMultiProcessFileAppender + Factory.NLog.I nternal.FileAppenders.IFileAppenderFactory.Open (System.String имя_файла, параметры ICreateFileParameters) NLog.Internal.FileAppenders.FileAppenderCache.AllocateAppender (System.String имя_файла) NLog.Targets.FileTarget.WriteToFile (System.String имя_файла, NLog. LogEventInfo LogEvent, System.Byte [] байт, булева justData) NLog.Targets.FileTarget.ProcessLogEvent (NLog.LogEventInfo LogEvent, System.String имя_файла, System.Byte [] bytesToWrite) NLog.Targets.FileTarget.Write (NLog .LogEventInfo LogEvent) NLog.Targets.Target.Write (AsyncLogEventInfo LogEvent)

Goog Насколько мне известно, le ничего не знает об этой ошибке. Ниже мой код конфигурации:

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; 
    } 

Это, как я создаю экземпляр регистратора:

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

И это, как я использую, что конкретизация:

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

Я попытался использовать ImpersonationTargetWrapper, но получить ту же ошибку. Я предоставил «Everyone» полные права на корневой каталог. Я также попробовал файл конфигурации, чтобы начать работу, но это тоже не помогло. Я несколько раз ударил головой об этом - у кого есть предложения?

+0

Попробуйте жестко кодировать путь и имя файла напрямую. Может быть проблема с именем файла – GreatJobBob

+0

Это в основном жестко закодировано - однако, вместо использования Guid.New - я просто попробовал с «file-log.log» и получил ту же ошибку. Я также пытался использовать Path.GetTempPath(), и я получаю ту же ошибку. – jeromeyers

+0

Какая платформа и версия NLog? Видите эту ошибку раньше в xamarin, насколько я помню. – Julian

ответ

1

В настоящее время NLog 4.4.1 выполняет обнаружение в режиме исполнения версии MONO и избегает использования имени mutex, если не работает MONO ver. 4 или новее (Unity работает в режиме MONO ver.2)