log4Net在Windows窗体应用程序不写日志文件 [英] log4Net in Windows Forms App does not write log file

查看:203
本文介绍了log4Net在Windows窗体应用程序不写日志文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Windows窗体应用程序,我试图实现log4net,以便我可以写一些日志。



我的实现如下: -



log4Net.config : -

 < configuration& 
<! - 为log4net部分注册一个section处理程序 - >
< configSections>
< section name =log4nettype =System.Configuration.IgnoreSectionHandlerrequirePermission =false/>
< / configSections>
< appSettings>
<! - 要启用内部lo​​g4net日志记录,请指定以下appSettings键 - >
< add key =log4net.Internal.Debugvalue =true/>
< / appSettings>
<! - 本节包含log4net配置设置 - >
< log4net>
<! - 定义一些输出附加器 - >
<追加程序名称=RollingLogFileAppenderTYPE =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]%-5级别%logger [%ndc] - %message%newline/>
< / layout>
< / appender>
< appender name=LogFileAppendertype =log4net.Appender.FileAppender>
< file value =C:\Johann\Log\log-file.txt/>
< appendToFile value =true/>
<! - 可以指定替代输出编码 - >
<! - < encoding value =unicodeFFFE/> - >
< layout type =log4net.Layout.PatternLayout>
< header value =[Header]&#13;&#10; />
< footer value =[Footer]&#13;&#10; />
< conversionPattern value =%date [%thread]%-5级别%logger [%ndc]& lt;%property {auth}& gt; - %message%newline/>
< / layout>
< / appender>

<! - 设置根类别,添加appender并设置默认级别 - >
< root>
< level value =ALL/>
< appender-ref ref =LogFileAppender/>
< appender-ref ref =RollingLogFileAppender/>
< / root>
< / log4net>
< / configuration>

和我的.cs

 使用log4net; 

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

public partial class Form1:形式
{

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


private void button1_Click(object sender,EventArgs e)
{

// CreateFolder();

log4net.Config.BasicConfigurator.Configure();

如果(log.IsErrorEnabled)
{

{
log.Error(页面加载失败:);
}
赶上(例外EXC)
{
串例外= exc.Message;
}
}

如果(log.IsDebugEnabled)
{

{
log.Debug(加载应用程序成功。
}
赶上(例外EXC)
{
串例外= exc.Message;
}
}
}
}

你可以从这个代码中看到的,我做了一个小测试,以创建一个文件,并通过代码文件夹// CreateFolder();。而这样的作品,所以它不是一个与权限问题。



我做错了什么?



感谢您的帮助和时间



UPDATE



Log4Net.config: -



<预类=郎咸平的XML prettyprint-覆盖> <结构>
< configSections>
<节名称=log4net的TYPE =System.Configuration.IgnoreSectionHandlerrequirePermission =FALSE/>
< / configSections>
< log4net>
<追加程序名称=RollingLogFileAppenderTYPE =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]%-5级别%logger [%ndc] - %message%newline/>
< / layout>
< / appender>
< appender name=LogFileAppendertype =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]%-5级别%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-filevalue =Log4Net.config/>
< / appSettings>

Assembly.cs: -

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

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(页面加载失败:);
log.Debug(应用程序加载成功。

}

仍然没有运气


如果你正在使用一个配置文件在app / web.confg之外,你的根元素应该是:

 <?xml version =1.0?> 
< log4net>
< appender name =RollingLogFileAppendertype =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]%-5级别%logger [%ndc] - %message%newline/>
< / layout>
< / appender>
< appender name =LogFileAppendertype =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]%-5级别%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属性设置为



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

或者删除所有属性,并使用XmlConfigurator:

  XmlConfigurator.ConfigureAndWatch(log4net.config); 

configuration.htmlrel =nofollow> http://logging.apache.org/log4net/release/manual/configuration.html


I have a Windows Forms App, and I am trying to implement log4net so that I can write some logs. However I cannot seem to get it to work.

My implementation is as follows :-

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>

and in my .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;
            }
        }
    }
}

As you can see from this code, I did a small test to create a file and folder through code " //CreateFolder(); " and that works, so its not an issue with permissions.

What I am doing wrong?

Thanks for your help and time

UPDATE

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.");

}

Still no luck though

解决方案

I don't normally wire up log4net using the assembly attribute

If you are using a configuration file external to the app/web.confg your root element should be:

<?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>

According to the docs:

If neither of the ConfigFile or ConfigFileExtension properties are specified, the application configuration file (e.g. TestApp.exe.config) will be used as the log4net configuration file.

So you will either need to do:

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

Or rename the log4net.config to YourApp.exe.log4net and set the assembly attribute to:

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

Or remove the attribute all together and use the XmlConfigurator:

XmlConfigurator.ConfigureAndWatch("log4net.config");

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

这篇关于log4Net在Windows窗体应用程序不写日志文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆