记录到文件时出现 NLog 异常(Unity 项目)
NLog Exception on Log to File (Unity project)
我正在使用 NLog 的编程配置,但每当应将日志文件写入时遇到以下错误:
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 对这个错误一无所知。以下是我的配置代码:
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 但遇到了同样的错误。我已授予 'Everyone' 根目录的全部权限。我也试过配置文件来开始,但这也没有帮助。我已经为这个问题苦苦思索了一段时间 - 有人有什么建议吗?
NLog 4.4.1 现在执行 MONO 版本的运行时检测,如果不是 运行 MONO 版本,则避免使用命名互斥体。 4 或更高版本(Unity 是 运行 MONO 版本 2)
我正在使用 NLog 的编程配置,但每当应将日志文件写入时遇到以下错误:
据我所知,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 对这个错误一无所知。以下是我的配置代码:
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 但遇到了同样的错误。我已授予 'Everyone' 根目录的全部权限。我也试过配置文件来开始,但这也没有帮助。我已经为这个问题苦苦思索了一段时间 - 有人有什么建议吗?
NLog 4.4.1 现在执行 MONO 版本的运行时检测,如果不是 运行 MONO 版本,则避免使用命名互斥体。 4 或更高版本(Unity 是 运行 MONO 版本 2)