I have compiled a 10 step tutorial on how to add logging to your .Net application. Could be pretty handy for quick reference. Here we go…

  1. First download log4net from – http://logging.apache.org/log4net/download.html
  2. Extract the log4net.dll from the bin folder of the downloaded zip file into your solution’s Library folder or bin folder or wherever you want to.
  3. Add this dll to each of your projects listed under the solution that require logging functionality, using the “Add reference” feature.
  4. Set up your config file now (web.config or app.config) – Add a new section for log4net under configSections.

    <configSections>
    <!-- Add a new section for log4net under configSections -->
    <section name="log4net"
    type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
  5. Now configure the log4net section. Add this section right after <system.web> section.

    <!-- Configure log4net -->
    <log4net>
    <!-- Add an appender of type FileAppender to configure log4net to log messages (error, information, debug etc.) to a text file -->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <param name="File" value="Log.txt" />
    <param name="AppendToFile" value="true" />
    <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="Hit header" />
    <param name="Footer" value="Fit footer" />
    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
    </layout>
    </appender>
    <!-- Add an appender of type AdoNetAppender to configure log4net to log messages (error, information, debug etc.) to a table in the database -->
    <appender name="DatabaseAppender" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=localhost;initial catalog=insert_your_database_name_here;integrated security=true;persist security info=True;" />
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
    <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
    </parameter>
    <parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout" value="%thread" />
    </parameter>
    <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout" value="%level" />
    </parameter>
    <parameter>
    <parameterName value="@logger" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout" value="%logger" />
    </parameter>
    <parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout" value="%message" />
    </parameter>
    </appender>
    <root>
    <level value="DEBUG" />
    <!-- Set the appenders here depending on where you want the messages to be logged. -->
    <appender-ref ref="LogFileAppender" />
    <appender-ref ref="DatabaseAppender" />
    </root>
    </log4net>
  6. If you are using the AdoNetAppender, you need to create a table in the database to hold these messages. Here’s a SQL code for the log table that will work with this example

    CREATE TABLE [dbo].[Log] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [Date] [datetime] NOT NULL ,
    [Thread] [varchar] (255) NOT NULL ,
    [Level] [varchar] (20) NOT NULL ,
    [Logger] [varchar] (255) NOT NULL ,
    [Message] [varchar] (4000) NOT NULL
    ) ON [PRIMARY]

    GO

  7. In your code, where you wanna add logging, add namespace at the beginning of the file:

    using log4net;

  8. Declare the logger variable or type ILog at the beginning of the class at a global level.
    static readonly ILog Logger = LogManager.GetLogger("Log4net");

  9. Add this line to the constructor of your class or in the Initialization method.

    log4net.Config.XmlConfigurator.Configure();

  10. Start logging away!

    Logger.Debug("Logger debug works!");
    Logger.Info("Logger info works!");
    Logger.Fatal("Logger fatal works!");

If everything worked fine, you should be able to see the messages in your datastore you set up in the config file – either the database or the flat file as per this example.
If you used the example above and used the flat file appender, you should see the file alongside bin folder (not *in* the bin folder) that has messages in it.
If you used the example above and used the database appender, you should see the messages in the Log folder.

(SELECT * FROM [Log])

Comments are closed.