Log4Net 不写入输出文件

Log4Net Not Writing to Output File

我在让 log4net 与 Windows 服务(多项目解决方案)一起工作时遇到了严重的问题。

我首先通过 NuGet 将对 log4net.dll 的引用添加到相应的项目中。然后,我在 Windows 服务项目的根文件夹中创建了一个新的 Log4Net.config 文件。在文件的属性中,我设置了 Copy to Output Directory = Copy always。下面是配置文件:

<?xml version="1.0"?>
<configuration>
    <log4net>
        <appender name="TestServiceLog" type="log4net.Appender.RollingFileAppender">
            <file value="C:\Temp\Test.log" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="100" />
            <maximumFileSize value="10MB" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
            </layout>
        </appender>
        <root>
            <level value="INFO" />
            <priority value="ALL" />
            <appender-ref ref="TestServiceLog" />
        </root>
    </log4net>
</configuration>

在我的 Windows 服务项目中,在 AssemblyInfo.cs 文件中,我添加了这一行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]

在我的主 TestService.cs class 中,我引用了 log4net 并像这样初始化了记录器(省略了非记录代码):

public partial class TestService : ServiceBase
{
    private ILog Log { get; set; }

    protected override void OnStart(string[] args)
    {
        Log = LogManager.GetLogger(this.GetType());
        Log.Info("Hear me log.");
    }
}

然后我安装了 运行 服务。我验证了服务是 运行 正常,但是没有日志文件是 created/written 到。没有异常被抛出。调试时一切都按顺序出现。我打开了 log4net 的内部调试并得到了这个:

log4net: Creating repository for assembly [TestService, Version=3.6.5570.17497, Culture=neutral, PublicKeyToken=null]
log4net: Assembly [TestService, Version=3.6.5570.17497, Culture=neutral, PublicKeyToken=null] Loaded From [C:\ProgramData\Company\Applications\TestService\TestService\TestService.exe]
log4net: Assembly [TestService, Version=3.6.5570.17497, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified.
log4net: Assembly [TestService, Version=3.6.5570.17497, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy]

输出似乎没有暗示任何问题。我还尝试将以下行添加到我的配置中,但没有成功:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>

我使用完全相同的配置向解决方案添加了一个 WinForms 项目,并且日志记录工作正常,所以我确信这不是我的设置。关于我可能错过的步骤还有其他想法吗?

我能够通过将 Log 变量设为静态并像这样实例化它来让它工作:

private static ILog Log = LogManager.GetLogger(typeof(TestService));

我不太清楚为什么这是必要的。希望其他人知道答案。