为了账号安全,请及时绑定邮箱和手机立即绑定

log4net 没有生成 log.txt 文件

log4net 没有生成 log.txt 文件

C#
慕勒3428872 2022-01-09 10:09:24
我直接从项目模板 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 文件。知道为什么吗?
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我认为这里的问题是您的log变量在调用构造函数之前被初始化。所以基本上你在打电话LogManager.GetLogger之前打电话XmlConfigurator.Configure()


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


public Service1()

{

    InitializeComponent();

    XmlConfigurator.Configure();

    log = LogManager.GetLogger(typeof(Service1));

}


查看完整回答
反对 回复 2022-01-09
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

添加另一个答案,因为我之前的预感似乎是错误的(或者您实际上在这里有两个问题)。假设您发布了整个 app.config 文件,看起来您并没有在其中的任何地方声明 log4net 配置部分:


  <configSections>

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

  </configSections>

也许这就是问题所在?


查看完整回答
反对 回复 2022-01-09
?
慕沐林林

TA贡献2016条经验 获得超9个赞

在我的特殊情况下,我们总是在类构造函数上初始化 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!!!");


查看完整回答
反对 回复 2022-01-09
  • 3 回答
  • 0 关注
  • 385 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信