log4net没有生成log.txt文件

时间:2018-09-07 17:29:31

标签: c# log4net

我直接从项目模板Windows Service在VS2017中的c#中构建了基本Windows服务。建没问题。安装没问题。

这是带有log4net部分的app.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
        </startup>
        <log4net>
            <appender name="FileAppender" type="log4net.Appender.FileAppender">
                <file value="log.txt" />
                <appendToFile value="true" />
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
                </layout>
            </appender>
            <appender name="ConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
                <mapping>
                    <level value="ERROR" />
                    <backColor value="Red, HighIntensity" />
                </mapping>
                <mapping>
                    <level value="WARN" />
                    <foreColor value="White" />
                    <backColor value="Yellow" />
                </mapping>
                <mapping>
                    <level value="INFO" />
                    <foreColor value="White" />
                </mapping>
                <mapping>
                    <level value="DEBUG" />
                    <backColor value="Green" />
                </mapping>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
                </layout>
            </appender>
            <root>
                <level value="ALL" />
                <appender-ref ref="ConsoleAppender" />
                <appender-ref ref="FileAppender" />
            </root>
        </log4net>
    </configuration>

我想记录一些事件,例如:

public partial class Service1 : ServiceBase
{
    private ILog log = LogManager.GetLogger(typeof(Service1));

    public Service1()
    {
        InitializeComponent();
        XmlConfigurator.Configure();
    }

    protected override void OnStart(string[] args)
    {
        log.Info("OnStart");
    }

    protected override void OnStop()
    {
        log.Info("OnStop");
    }
}

启动服务时,我看不到该exe所在的文件夹(Debug \ Bin)中创建的任何log.txt文件。

知道为什么吗?

3 个答案:

答案 0 :(得分:1)

我认为这里的问题是您的log变量在调用构造函数之前已初始化。因此,基本上,您在致电LogManager.GetLogger之前先致电XmlConfigurator.Configure()

配置log4net后,尝试在构造函数中初始化log,看看是否能解决您的问题。

public Service1()
{
    InitializeComponent();
    XmlConfigurator.Configure();
    log = LogManager.GetLogger(typeof(Service1));
}

答案 1 :(得分:1)

自从我之前的直觉似乎添加了另一个答案似乎是错误的(或者您实际上在这里有两个问题)。假设您发布了整个app.config文件,就好像您在其中的任何地方声明log4net config部分一样:

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

也许是问题所在?

答案 2 :(得分:0)

在我的特殊情况下,我们总是在类构造函数上初始化Log4Net时设置app.config文件:

Warning (from warnings module):
File"/Library/Frameworks/Python.framework/Versions/3.6/lib/ 
python3.6/ 
importlib/_bootstrap.py", line 219
return f(*args, **kwds)
RuntimeWarning: compiletime version 3.5 of module 
'tensorflow.python.framework.fast_tensor_util' does not match 
runtime version 3.6