Castle Log4Net 设施不记录

Castle Log4Net facility not logging

我正在尝试在 windows 服务中使用 Castle log4Net 工具。我无法让它写日志,所以我想我会创建一个控制台应用程序来尝试让它首先工作。我仍然没有看到写入的日志文件。我做错了什么或错过了什么?

namespace CastleLoggingFacilityWithLog4Net
{
    class Program
    {
        private static IWindsorContainer _container;

        static void Main(string[] args)
        {

            _container = new WindsorContainer();
            _container.Register(Component.For<IService>().ImplementedBy<Service>().LifestyleTransient());
            _container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.Log4net));
            //_container.Install(FromAssembly.This());

            var service = _container.Resolve<IService>();
            service.TestLogging();
        }
    }

    public interface IService
    {
        void TestLogging();
    }

    public class Service : IService
    {
        private ILogger logger = NullLogger.Instance;

        public void TestLogging()
        {
            Logger.Info("this is a test");
        }

        public ILogger Logger
        {
            get { return logger; }
            set { logger = value; }
        }

    }
}

在log4net.config中添加我的log4net配置如下...

<configuration>
  <configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <file value="logging\log.txt" />
  <appendToFile value="true" />
  <datePattern value="dd-MM-yyyy'.log'" />
  <staticLogFileName value="false" />
  <rollingStyle value="Date"/>
  <maximumFileSize value="10MB" />
  <maxSizeRollBackups value="5" />
  <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate %-5level %logger - %message%newline%exception" />
  </layout>
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingFile" />
</root>
</log4net>
</configuration>

您必须在 Main() 中添加以下代码才能生成日志文件,这将导致使用 configSource

log4net.Config.XmlConfigurator.Configure();

编辑: 根据 app.config 中的文件值。它会将日志文件写入 ProgramFiles,并非所有用户都有权访问程序文件中的 write/edit 文件。因此,我建议将日志文件写入 AppData。

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="${LOCALAPPDATA}\logging\log.txt" />
....
</appender>

事实证明,我的代码或配置没有任何问题。问题是 log4net 配置没有设置为复制到输出目录!遗憾的是,Castle 或 log4net 都无法告诉我找不到日志文件。