Castle Log4Net设施未记录

时间:2015-01-22 18:26:20

标签: c# log4net castle-windsor castle

我正在尝试在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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

log4net.Config.XmlConfigurator.Configure();

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

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