问题
Nothing happens with the following configuration.
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Form1.cs (Example)
public partial class Form1 : Form
{
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Form1()
{
InitializeComponent();
log.Fatal("Test!");
}
}
回答1:
You are missing the root configuration so you need something like
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
<log4net debug="true">
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<applicationName value="MyApp" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
</configuration>
Also note that if your program is called app.exe , then you need an eventlog source called app.exe. If this does not exist, then Log4net will attempt to create it, but that requires Admin rights, so you may need to run your program as admin at least once in order to create this event source. To avoid this, the event source would normally be created as part of the installation procedure which would already be running as admin.
回答2:
You should add:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
in the AssemblyInfo.cs of your project. This will initialize the logger. And put the log4net into a file named log4net.config.
回答3:
Make sure that you gave write permissions to your user to:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\EventLog\MyApp
and if you want to add more logers have to follow this nomenclature:
<root name="EventLog">
<level value="ALL"/>
<appender-ref ref="FirstLog"/>
</root>
<logger name="FileLogger" additivity="false">
<level value="ALL" />
<appender-ref ref="Secong_Log" />
</logger>
Good Luck.
来源:https://stackoverflow.com/questions/15088226/log4net-with-eventlogappender-doesnt-log