【问题标题】:NLog Exception on Log to File (Unity project)日志到文件的 NLog 异常(Unity 项目)
【发布时间】:2016-12-29 01:10:12
【问题描述】:

我正在对 NLog 使用编程配置,并且每当应写入日志文件时都会遇到以下错误:

ArgumentOutOfRangeException:参数超出范围。 System.Security.AccessControl.AuthorizationRule..ctor (System.Security.Principal.IdentityReference 身份,Int32 accessMask, Boolean isInherited, InheritanceFlags 继承Flags, PropagationFlags 传播标志)(在 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Security.AccessControl/AuthorizationRule.cs:61) System.Security.AccessControl.AccessRule..ctor (System.Security.Principal.IdentityReference 身份,Int32 accessMask, Boolean isInherited, InheritanceFlags 继承Flags, PropagationFlags (propagationFlags, AccessControlType 类型) System.Security.AccessControl.MutexAccessRule..ctor (System.Security.Principal.IdentityReference 身份,MutexRights eventRights, AccessControlType 类型) NLog.Internal.FileAppenders.BaseFileAppender.CreateShareableMutex (System.String mutexNamePrefix) NLog.Internal.FileAppenders.BaseFileAppender.CreateShareableArchiveMutex () 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.Internal.FileAppenders.IFileAppenderFactory.Open (System.String 文件名,ICreateFileParameters 参数) NLog.Internal.FileAppenders.FileAppenderCache.AllocateAppender (System.String 文件名) NLog.Targets.FileTarget.WriteToFile (System.String 文件名,NLog.LogEventInfo logEvent,System.Byte[] bytes, Boolean 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)

据我所知,Google 对此错误一无所知。以下是我的配置代码:

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????");

我尝试过使用 ImpersonatingTargetWrapper,但得到了同样的错误。我已授予“每个人”对根目录的完全权限。我也尝试过配置文件以开始使用,但这也无济于事。我已经为此努力了一段时间 - 有人有什么建议吗?

【问题讨论】:

  • 尝试直接硬编码路径和文件名。可能是文件名的问题
  • 它基本上是硬编码的 - 但是,我没有使用 Guid.New - 我只是尝试使用“file-log.log”并得到相同的错误。我也尝试过使用 Path.GetTempPath() 并得到同样的错误。
  • 哪个平台和 NLog 版本?据我记得,之前在 xamarin 中看到过这个错误。
  • 你能试试 NLog 4.2 并提交一个错误吗? Mono v2 有问题,不确定是否是同一个问题。 github.com/NLog/NLog/issues/new
  • 如果您不需要多个进程写入同一个文件,请考虑设置 FileTarget.ConcurrentWrites=false(也可以提高性能)。这应该会阻止 NLog 使用 Mono 版本不支持的互斥锁。 2

标签: c# .net nlog


【解决方案1】:

NLog 4.4.1 现在执行 MONO 版本的运行时检测,如果不运行 MONO 版本,则避免使用命名互斥锁。 4 或更高版本(Unity 运行 MONO 版本 2)

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2014-10-04
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多