【问题标题】:log4Net in Windows Forms App does not write log fileWindows 窗体应用程序中的 log4Net 不写入日志文件
【发布时间】:2012-02-28 12:32:56
【问题描述】:

我有一个 Windows 窗体应用程序,我正在尝试实现 log4net,以便我可以编写一些日志。但是我似乎无法让它工作。

我的实现如下:-

log4Net.config :-

<configuration>
<!-- Register a section handler for the log4net section -->
    <configSections>
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler" requirePermission="false" />
    </configSections>
    <appSettings>
        <!-- To enable internal log4net logging specify the following appSettings key -->
        <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings>
    <!-- This section contains the log4net configuration settings -->
    <log4net>
        <!-- Define some output appenders -->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="C:\Johann\Log\rolling-log.txt" />
            <appendToFile value="true" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="100" />
            <rollingStyle value="Size" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <footer value="[Footer]&#13;&#10;" />
                <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
            </layout>
        </appender>
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="C:\Johann\Log\log-file.txt" />
            <appendToFile value="true" />
            <!-- An alternate output encoding can be specified -->
            <!-- <encoding value="unicodeFFFE" /> -->
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <footer value="[Footer]&#13;&#10;" />
                <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
            </layout>
        </appender>

        <!-- Setup the root category, add the appenders and set the default level -->
        <root>
            <level value="ALL" />
            <appender-ref ref="LogFileAppender" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
    </log4net>
</configuration>

在我的 .cs 中

using log4net;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
[assembly: log4net.Config.Repository()]

public partial class Form1 : Form
{

    public static readonly ILog log = LogManager.GetLogger("NotifMailer");


    private void button1_Click(object sender, EventArgs e)
    {

        //CreateFolder();

        log4net.Config.BasicConfigurator.Configure();

        if (log.IsErrorEnabled)
        {
            try
            {
                log.Error("Page Load failed : ");
            }
            catch (Exception exc)
            {
                string exception = exc.Message;
            }
        }

        if (log.IsDebugEnabled)
        {
            try
            {
                log.Debug("Application loaded successfully.");
            }
            catch (Exception exc)
            {
                string exception = exc.Message;
            }
        }
    }
}

从这段代码中可以看出,我做了一个小测试,通过代码“//CreateFolder();”创建文件和文件夹,并且可以正常工作,所以这不是权限问题。

我做错了什么?

感谢您的帮助和时间

更新

Log4Net.config :-

<configuration>
    <configSections>
            <section name="log4net" type="System.Configuration.IgnoreSectionHandler" requirePermission="false" />
    </configSections>
    <log4net>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="C:\Johann\Log\rolling-log.txt" />
            <appendToFile value="true" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="100" />
            <rollingStyle value="Size" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <footer value="[Footer]&#13;&#10;" />
                <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
            </layout>
        </appender>
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <file value="C:\Johann\Log\log-file.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <footer value="[Footer]&#13;&#10;" />
                <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
            </layout>
        </appender>

        <root>
            <level value="ALL" />
            <appender-ref ref="LogFileAppender" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
    </log4net>
</configuration>

App.Config :-

<appSettings>
    <add key="log4net-config-file" value="Log4Net.config"/>
</appSettings>

Assembly.cs :-

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] 

Form1.cs :-

private static readonly ILog log = LogManager.GetLogger(typeof(Form1));

private void button1_Click(object sender, EventArgs e)
{

    //log4net.Config.BasicConfigurator.Configure();

    XmlConfigurator.Configure(new FileInfo(ConfigurationManager.AppSettings["log4net-config-file"]));

    log.Error("Page Load failed : ");
    log.Debug("Application loaded successfully.");

}

还是没有运气

【问题讨论】:

  • &lt;log4net debug="true"&gt; ... 启用 log4net 调试语句,看看是否能给你任何线索。

标签: winforms c#-4.0 log4net


【解决方案1】:

我通常不使用程序集属性连接 log4net

如果您使用的是 app/web.confg 外部的配置文件,您的根元素应该是:

<?xml version="1.0"?>
<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\Johann\Log\rolling-log.txt" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100" />
      <rollingStyle value="Size" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <header value="[Header]&#13;&#10;" />
        <footer value="[Footer]&#13;&#10;" />
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file value="C:\Johann\Log\log-file.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <header value="[Header]&#13;&#10;" />
        <footer value="[Footer]&#13;&#10;" />
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
</log4net>

根据文档:

如果 ConfigFile 或 ConfigFileExtension 属性均未指定,则应用程序配置文件(例如 TestApp.exe.config)将用作 log4net 配置文件。

所以你要么需要这样做:

[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config",Watch=true)]

或者将 log4net.config 重命名为 YourApp.exe.log4net 并将程序集属性设置为:

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net",Watch=true)]

或者一起删除属性并使用 XmlConfigurator:

XmlConfigurator.ConfigureAndWatch("log4net.config");

http://logging.apache.org/log4net/release/manual/configuration.html

【讨论】:

  • 我已经在程序集中尝试过 :(( [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
  • 嗨 Bronumski 你的根和我的根有什么不同?对我来说,它们看起来很相似
  • @Johann 在外部文件中应该是“log4net”而不是“配置”
  • @Johann 您能否更新问题以包含 log4net.config 文件的全部内容?
  • @Johann 您还需要包含配置文件的名称或扩展名。请参阅我的更新答案。
【解决方案2】:

发现了我的问题。

我应该做的

XmlConfigurator.Configure();

在 Program.cs 中,因为它必须在初始化记录器之前运行那段代码

private static readonly ILog log = LogManager.GetLogger(typeof(Form1));

【讨论】:

    【解决方案3】:

    log4net.Config.BasicConfigurator.Configure();

    这是一个简单的配置,只支持写入控制台并且忽略你的配置文件。

    您应该使用 XmlConfigurator 而不是 BasicConfigurator

    【讨论】:

    • 我已经删除了 BasicConfigurator 并且 XmlConfigurator 仍然没有运气 //log4net.Config.BasicConfigurator.Configure(); log4net.Config.XmlConfigurator.Configure();
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2014-11-01
    • 2016-05-08
    • 2012-11-11
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多