Reputation: 4173
I have some troubles while writing logs from log4net to the file. I seem to do all as described in manual, but that does not work. Here is my logging.config file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Please help with an example of configuration file which actually works.
Upvotes: 41
Views: 80794
Reputation: 80212
Here is a complete step-by-step guide to adding Log4Net to your project, under Visual Studio 2012 and .NET 4.5.
Add a new C# console app to your solution.
Select Tools >> Library Package Manager >> Manage NuGet Packages For Solution
and search for log4net
. Install it, and select which project(s) you want to add the log4net references.
Edit Program.cs
:
using System;
namespace Log4Net
{
class Program
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n");
log.Info("Info logging");
try
{
throw new Exception("Exception!");
}
catch (Exception e)
{
log.Error("This is my error", e);
}
Console.WriteLine("[any key to exit]");
Console.ReadKey();
}
}
}
}
log4.config
, right click and select Properties
then select Copy to Output Directory - Copy If Newer
.<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="250KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
App.Config
so it matches the following:<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="log4net.Config" value="log4.config"/>
<add key="log4net.Config.Watch" value="True"/>
<add key="log4net.Internal.Debug" value="False"/>
</appSettings>
</configuration>
Run the program and observe the file log.txt
that is created in the output \bin\Debug\
directory:
2013-08-10 11:54:26,798 [10] INFO Log4Net.Program [(null)] - Info logging
2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error
System.Exception: Exception!
at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14
In the future, if you want to add log4net
to another Project, select Tools >> Library Package Manager >> Manage NuGet Packages For Solution
select log4net
and click Manage
then tick the Projects you want to add log4net
to.
Upvotes: 87
Reputation: 1115
Fantastic. The answers are correct... except that they weren't working for me
Searched the net and finally discovered I was missing the following line in Assembly.cs:
[assembly: log4net.Config.XmlConfigurator]
Upvotes: 3
Reputation: 10591
You don't seem to have a <root>
element that references your appender:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="250KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
Upvotes: 48
Reputation: 218722
Did you call the configure method when the application starts for the first time ?
log4net.Config.XmlConfigurator.Configure();
If yes. You should be good. Check the file permissions on the disk you are writing.
If you want you can enable log4net internal debugging also to figure out what is wrong.
http://logging.apache.org/log4net/release/faq.html#troubleshooting
Upvotes: 21
Reputation: 1195
There are two things that you can do:
One, if you want to use a seperate config file, by adding the following to you app.config file it will configure logging automatically.
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="log4net.Config" value="log4.config"/>
<add key="log4net.Config.Watch" value="True"/>
<add key="log4net.Internal.Debug" value="False"/>
</appSettings>
</configuration>
Otherwise, you need to initiate logging in the start of your application.
//Initiate logging based on web.config file
log4net.Config.XmlConfigurator.Configure();
// Create a logger for use in this class
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Upvotes: 6