Logger for WPF Application
Using Apache log4net.
Logging is the process of recording application actions and state to a secondary interface.
What is logging and why is it important?
We are recording application actions and state . We are recording these to a secondary interface, which is a file in this case but could be anything like Web-Service, email, etc. The nature of the interface is not so important, what is important is that this is a secondary interface. The user who sees this interface, the support guy looking at the application log, does not have access to the application’s primary interface. This means that what is detailed in this log is very important; it is often the main source of information when diagnosing a problem.
Clearly, logging is an important application function, and one which deserves just a little bit of thought!
Here we will be creating a Logger in WPF Application and log some clicks, but you can do anything, Its just a demo.
→ Create a WPF application in Visual Studio.
- Select Tools from top menu.
- Go to NuGet package manager.
- Select Manage NuGet Packages for Solution.
→ Select log4net by Apache Software.
→ Add a config file to project name it as “log4net.config”.
- Select Application Configuration File from menu.
- Rename file to “log4net.config”.
→ Select log4net.config from solution explorer, see for options in properties :
- Build Action → Change to “ Content”.
- Copy to output directory → Change to “copy always”.
→ Add this in log4net.config file. Between <configuration></configuration> tag. Change <file value> for changing location of log files.
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="DIRECTORY WHERE YOU WANT TO COPY THE LOG FILES\LOG_FILE_NAME.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
→ Open AssemblyInfo.cs from solution explorer and add at the end
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
→ Configure App.xaml.cs file.
- Add using log4net; reference.
- add these codes inside “public partial class App : Application” :
private static readonly ILog log = LogManager.GetLogger(typeof(App));
protected override void OnStartup(StartupEventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
log.Info(" ============= Started Logging ============= ");
base.OnStartup(e);
}
→ Open MainWindow.cs
Add reference :
using log4net;
Add these codes inside “public partial class MainWindow”
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Inside public MainWindow() :
log4net.Config.XmlConfigurator.Configure();
Options available for logs :
Options Available/** log.info* log.error* log.fatal* log.debug*/