log4net 没有生成 log.txt 文件

我直接从项目模板 Windows 服务在 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>


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


知道为什么吗?


慕勒3428872
浏览 387回答 3
3回答

慕码人2483693

我认为这里的问题是您的log变量在调用构造函数之前被初始化。所以基本上你在打电话LogManager.GetLogger之前打电话XmlConfigurator.Configure()log在配置 log4net 后尝试在构造函数中进行初始化,看看是否能解决您的问题。public Service1(){&nbsp; &nbsp; InitializeComponent();&nbsp; &nbsp; XmlConfigurator.Configure();&nbsp; &nbsp; log = LogManager.GetLogger(typeof(Service1));}

ABOUTYOU

添加另一个答案,因为我之前的预感似乎是错误的(或者您实际上在这里有两个问题)。假设您发布了整个 app.config 文件,看起来您并没有在其中的任何地方声明 log4net 配置部分:&nbsp; <configSections>&nbsp; &nbsp; <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />&nbsp; </configSections>也许这就是问题所在?

慕沐林林

在我的特殊情况下,我们总是在类构造函数上初始化 Log4Net 时设置 app.config 文件:&nbsp;log4net.Config.XmlConfigurator.Configure(new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "YouAppConfigFile.config")));&nbsp;Log = log4net.LogManager.GetLogger("ServiceClass1");&nbsp;Log.Info("ServiceClass1 Started!!!");
打开App,查看更多内容
随时随地看视频慕课网APP