簡體   English   中英

log4net沒有生成log.txt文件

[英]log4net is not generating log.txt file

我直接從項目模板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文件。

知道為什么嗎?

我認為這里的問題是您的log變量在調用構造函數之前已初始化。 因此,基本上,您在調用XmlConfigurator.Configure()之前先調用LogManager.GetLogger

在配置log4net之后,嘗試初始化構造函數中的log ,看看是否可以解決您的問題。

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

自從我之前的直覺以來,添加另一個答案似乎是錯誤的(或者您實際上在這里有兩個問題)。 假設您發布了整個app.config文件,就好像您在其中的任何地方聲明log4net config部分一樣:

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

也許那是問題所在?

在我的特殊情況下,我們總是在類構造函數上初始化Log4Net時設置app.config文件:

 log4net.Config.XmlConfigurator.Configure(new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "YouAppConfigFile.config")));
 Log = log4net.LogManager.GetLogger("ServiceClass1");
 Log.Info("ServiceClass1 Started!!!");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM