argyle
argyle

Reputation: 1339

NLog Exception on Log to File (Unity project)

I'm using programmatic configuration with NLog and am encountering the following error whenever the log file should be written to:

ArgumentOutOfRangeException: Argument is out of range. System.Security.AccessControl.AuthorizationRule..ctor (System.Security.Principal.IdentityReference identity, Int32 accessMask, Boolean isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Security.AccessControl/AuthorizationRule.cs:61) System.Security.AccessControl.AccessRule..ctor (System.Security.Principal.IdentityReference identity, Int32 accessMask, Boolean isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type) System.Security.AccessControl.MutexAccessRule..ctor (System.Security.Principal.IdentityReference identity, MutexRights eventRights, AccessControlType type) 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 fileName, ICreateFileParameters createParameters) NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender..ctor (System.String fileName, ICreateFileParameters parameters) NLog.Internal.FileAppenders.RetryingMultiProcessFileAppender+Factory.NLog.Internal.FileAppenders.IFileAppenderFactory.Open (System.String fileName, ICreateFileParameters parameters) NLog.Internal.FileAppenders.FileAppenderCache.AllocateAppender (System.String fileName) NLog.Targets.FileTarget.WriteToFile (System.String fileName, NLog.LogEventInfo logEvent, System.Byte[] bytes, Boolean justData) NLog.Targets.FileTarget.ProcessLogEvent (NLog.LogEventInfo logEvent, System.String fileName, System.Byte[] bytesToWrite) NLog.Targets.FileTarget.Write (NLog.LogEventInfo logEvent) NLog.Targets.Target.Write (AsyncLogEventInfo logEvent)

Google doesn't know anything about this error, as far as I can see. The following is my configuration code:

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

This is how I instantiate the logger:

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

And this is how I use that instantiation:

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

I've tried using the ImpersonatingTargetWrapper but get the same error. I've given 'Everyone' full rights to the root directory. I've also tried configuration file to get started, but that didn't help either. I've banged my head for a while against this one - anyone have any suggestions?

Upvotes: 0

Views: 409

Answers (1)

Rolf Kristensen
Rolf Kristensen

Reputation: 19912

NLog 4.4.1 now performs runtime detection of MONO version, and avoids using named mutex if not running MONO ver. 4 or newer (Unity is running MONO ver. 2)

Upvotes: 1

Related Questions