log4Net在Windows窗体应用程序不写日志文件 [英] log4Net in Windows Forms App does not write log file
问题描述
我有一个Windows窗体应用程序,我试图实现log4net,以便我可以写一些日志。
我的实现如下: -
log4Net.config : -
< configuration&
<! - 为log4net部分注册一个section处理程序 - >
< configSections>
< section name =log4nettype =System.Configuration.IgnoreSectionHandlerrequirePermission =false/>
< / configSections>
< appSettings>
<! - 要启用内部log4net日志记录,请指定以下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] " />
<footer value="[Footer] " />
<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] " />
<footer value="[Footer] " />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %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] " />
<footer value="[Footer] " />
<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] " />
<footer value="[Footer] " />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %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] " />
<footer value="[Footer] " />
<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] " />
<footer value="[Footer] " />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %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屋!