gpt4 book ai didi

azure - Log4net 无法在 Azure 上运行

转载 作者:行者123 更新时间:2023-12-03 01:43:32 27 4
gpt4 key购买 nike

Log4net 在本地运行良好,但在 Azure 上,它仅创建文件和 header 。没有日志写入文件。错误地它说文件被另一个程序使用,我已经添加了 .它在本地创建所有日志。

框架:.net 4.5,Log4net版本:2.0.3

网络配置:

<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="D:\home\site\wwwroot\log\ErrorLog.log" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n %d [%t] %-5p %c %m%n" />
</layout>
</appender>
<appender name="ALogger" type="HeaderOnceAppender">
<file type="log4net.Util.PatternString" value="D:\home\site\wwwroot\log\A\ALogger_.csv" />
<appendToFile value="true" />
<preserveLogFileNameExtension value="true" />
<rollingStyle value="Date" />
<datePattern value="dd-MM-yyyy-HH" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<header value="Connection Id,Source,DateTime,Event,Logger Source,Stack trace" />
<conversionPattern value="%n%message,%stacktracedetail{5}" />
</layout>
</appender>
<appender name="BLogger" type="HeaderOnceAppender">
<file type="log4net.Util.PatternString" value="D:\home\site\wwwroot\log\B\BLogger_.csv" />
<appendToFile value="true" />
<preserveLogFileNameExtension value="true" />
<rollingStyle value="Date" />
<datePattern value="dd-MM-yyyy" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<header value="Process,Message,DateTime" />
<conversionPattern value="%n%message" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="ALogger" additivity="False">
<level value="All" />
<appender-ref ref="ALogger" />
</logger>
<logger name="BLogger" additivity="False">
<level value="All" />
<appender-ref ref="BLogger" />
</logger>
</log4net>
</configuration>

附加程序类:

public class HeaderOnceAppender : RollingFileAppender
{
protected override void WriteHeader()
{
if (LockingModel.AcquireLock().Length == 0)
{
base.WriteHeader();
}
}
}

public class xyzOperationLogger
{
public readonly static ILog ALogger;
public readonly static ILog BLogger;
public readonly static ILog System;

static xyzOperationLogger()
{
System = LogManager.GetLogger("System");
ALogger = LogManager.GetLogger("ALogger");
BLogger = LogManager.GetLogger("BLogger");
log4net.Config.XmlConfigurator.Configure();
}
}

Log4net 日志: log4net:打开文件写入 [D:\home\site\wwwroot\log\ErrorLog.log] 附加 [True] log4net:错误 [FileAppender] 错误代码:GenericFailure。无法获取文件 D:\home\site\wwwroot\log\ErrorLog.log 上的锁定。该进程无法访问文件“D:\home\site\wwwroot\log\ErrorLog.log”,因为该文件正在被另一个进程使用。 log4net:创建 Appender [LogFileAppender]

log4net: Searched for existing files in [D:\home\site\wwwroot\log\A]
log4net: curSizeRollBackups starts at [0]
log4net: [20-04-2018] vs. [20-04-2018]
log4net: Opening file for writing [D:\home\site\wwwroot\log\A\ALogger_.csv] append [True]
log4net: Created Appender [A]
log4net: Adding appender named [A] to logger [ALogger].

same error for BLogger:

log4net:ERROR [HeaderOnceAppender] ErrorCode: GenericFailure. Unable to acquire lock on file D:\home\site\wwwroot\log\B\BLogger_.csv. The process cannot access the file 'D:\home\site\wwwroot\log\B\BLogger_.csv' because it is being used by another process.

最佳答案

此问题已被多人报告为问题 LOG4NET-178 .

该问题似乎是由损坏的 LOG4NET 配置或由应用程序关闭事件引起的计时问题引起的,该事件在应用程序启动事件之后延迟,因此 LOG4NET启动后立即停止记录。

解决问题的第一步是启用 log4net 内部调试功能(如此处所述)并修复弹出的所有错误。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>

如果问题仍然存在,则 comment建议将 LOG4NET 配置从 web.config 移到一个单独的文件中,例如 log4net.config。

最后,如果前面的两个步骤都没有帮助并且问题仍然出现,您可以尝试通过从类构造函数调用配置调用来解决事件计时问题,如 comment 中所述。 .

此外,如果您使用配置属性,则必须调用 log4net 以允许其读取属性。对 LogManager.GetLogger 的简单调用将导致调用程序集上的属性被读取和处理。

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

并对日志进行任何调用(即使是从附加过程中过滤或评估的日志,它也应该强制 log4net 评估您的存储库/层次结构)

static Program()
{
Log.Debug("Application loaded.");
}

别忘了添加<log4net debug="true">您的配置中的这一行。更详细的可以引用这个thread .

关于azure - Log4net 无法在 Azure 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com