log4net is best logging framework available for .Net.
Let's start with step by step, how to log error in your application.
Step 1:first download latest log4net dll.
click Log4Net dll to download and add reference in your project.
Step 2: Create log4net.config application configuration file for configuration settings.
FileName : log4net.config
there are many ways to create log file and message/error format.
I have created 2 formats, one for create log file within folder, one for create log file directly within Debug folder.
Format 1 : Create folder named Log and create log file dynamically date wise and save in Debug folder.
<log4net debug="true">
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="Logs\log" />
<staticLogFileName value="false"/>
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=" yyyy-MM-dd".xml""/>
<layout type="log4net.Layout.PatternLayout">
<!--<param name="ConversionPattern"
value="%d [%t] %-5p %c %m%n" />-->
<conversionPattern
value="%date [%thread] %-5level %logger ==> %message%newline"/>
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
Format 2 : Create log file named hirenlog.txt and save in Debug folder.
<log4net debug="true">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="hirenlog.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
"Copy to Output Directory" property value to "Copy if newer" as highlighted in below image.
Step 4: Open AssemblyInfo.cs file from properties and add below line at end of file.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Step 5 : Create Logger Class.
public interface ILogger
{
void LogException(Exception exception);
void LogError(string message);
void LogWarningMessage(string message);
void LogInfoMessage(string message);
}
public class Logger : ILogger
{
private static ILog log = null;
static Logger()
{
//var log4NetConfigDirectory =
//AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
//var log4NetConfigFilePath = Path.Combine(log4NetConfigDirectory, "log4net.config");
//log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFilePath));
log = LogManager.GetLogger(typeof(Logger));
log4net.GlobalContext.Properties["host"] = Environment.MachineName;
}
public Logger(Type logClass)
{
log = LogManager.GetLogger(logClass);
}
#region ILogger Members
public void LogException(Exception exception)
{
if (log.IsErrorEnabled)
log.Error(string.Format(CultureInfo.InvariantCulture, "{0}", exception.Message), exception);
}
public void LogError(string message)
{
if (log.IsErrorEnabled)
log.Error(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
public void LogWarningMessage(string message)
{
if (log.IsWarnEnabled)
log.Warn(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
public void LogInfoMessage(string message)
{
if (log.IsInfoEnabled)
log.Info(string.Format(CultureInfo.InvariantCulture, "{0}", message));
}
#endregion
}
Above class configures log4net using xml file (log4net.config) and creates instance of ILog, now you will use this class for logging errors from ViewModels.
Step 6 : In you ViewModel Initialize ILogger class and logs errors.
internal class MainWindowViewModel
{
ILogger logger = new Logger(typeof(MainWindowViewModel));
public MainWindowViewModel()
{
logger.LogError("Error while downloading data");
}
}
so, this is simple way to logs you error and exception details.












