It's a good tool for logging what you want, I have used years before. Today, I just to give some sample tutorial of how to config it, and is just a method of many.
Before doing that, you need to know three things:
1, A config file, like the web.config, but it's content is power, and describe the format for log information, or file format, or others, and here I will give it a sample name: log4net.config.(of course, any other name you like is ok), have a look at below's code:
Code
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="MainAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Myself\Projects\TradeSys\LogFile\MainLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
<appender name="CommonAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Myself\Projects\TradeSys\LogFile\Credit_Log.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="to@to.com" />
<from value="from@from.com" />
<subject value="test logging message" />
<smtpHost value="mail.test.com" />
<bufferSize value="512" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" /><!--the min limited log record count, e.g. Till the count large then 2, data wll be insert into db-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=[server];initial catalog=[db name];integrated security=false;persist security info=True;User ID=[db admin];Password=[password]" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[User],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @user, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@user" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{user}" /><!--X:include to get from MDC-->
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="MainAppender" />
</root>
<logger name="CommonLogger" additivity="false">
<level value="ALL"/>
<appender-ref ref="CommonAppender" />
</logger>
<logger name="SmtpLogger" additivity="false">
<level value="ALL"/>
<appender-ref ref="SmtpAppender" />
</logger>
<logger name="AdoNetLogger" additivity ="false">
<level value="ALL"/>
<appender-ref ref="AdoNetAppender" />
</logger>
<!--merge two log listener to one-->
<logger name="AdoNetAndSmtpLogger" additivity ="false">
<level value="ALL"/>
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="SmtpAppender" />
</logger>
</log4net>
note: if you want to log to db, and you need to create a table like below:
Code
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[User] [varchar] (50) NULL,--it's added manual, so you need to set it's value before logging to db.
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
)
log4net.MDC.Set("user", User.Identity.Name);
2, Config the Globle to make sure, it will start when web application is started. So, you need to add code as below:
Code
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
string logFile = ConfigurationManager.AppSettings["LogConfig"];
if (string.IsNullOrEmpty(logFile) ==false)
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath(logFile)));
}
3, I like to write a static method in order to can be call at any page, like to new a class file 'Utilities.cs' in App_Code folder, and line code as below:
Code
public static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);