Log4Net doesn't log or error

19,538

Solution 1

Have you added added the following section under under Configuration->Configsections

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

Although it is possible to add your log4net configuration settings to your project’s app.config or web.config file, it is preferable to place them in a separate configuration file. Aside from the obvious benefit of maintainability, it has the added benefit that log4net can place a FileSystemWatcher object on your config file to monitor when it changes and update its settings dynamically.

To use a separate config file, add a file named Log4Net.config to your project and add the following attribute to your AssemblyInfo.cs file:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]

Note: for web applications, this assumes Log4Net.config resides in the web root. Ensure the log4net.config file is marked as “Copy To Output” -> “Copy Always” in Properties.

From here.

Solution 2

you can also set the following appsettings to enable internal log4net debugging information

<appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

The internal debug messages are written to the console (if you have one) or the trace (such as the debug window in visual studio or dbgview from sysintenals). This will help you to troubleshoot log4net issues.

Solution 3

Internal debugging for log4Net is the way to go as suggested by @Pratik. To write the details into a file do the following:

Add the following in web.config even if you are using a different config file for log4net.

<appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

<system.diagnostics>
<trace autoflush="true">
  <listeners>
    <add
    name="textWriterTraceListener"
    type="System.Diagnostics.TextWriterTraceListener"
    initializeData="C:\toolbox\SmartClient\log4net.txt" />
  </listeners>
</trace>
</system.diagnostics>

Reference

  1. How do I enable log4net internal debugging?
  2. log4net - Appenders not working in IIS7.5
Share:
19,538
Luke Lowrey
Author by

Luke Lowrey

Development team manager (and developer!) specialising in web applications. Founder of austechjobs.com.au a job board for high quality Australian tech jobs.

Updated on June 04, 2022

Comments

  • Luke Lowrey
    Luke Lowrey almost 2 years

    I have been attempting to get log4net logging in my asp.net web application with no success or any noticable errors. I am attempting to use the ADONetAppender appender with the following config:

    <log4net>
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="server=" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context]) VALUES 
                                (@log_date, @thread, @log_level, @logger, @message, @exception, @context)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="32" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%t" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="512" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%p" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@context" />
        <dbType value="String" />
        <size value="512" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%x" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="512" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%c" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%m" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ADONetAppender" />
    </root>
    

    In my global.asax Application_Start I call

    log4net.Config.XmlConfigurator.Configure();
    

    Then to attempt to log:

    protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    protected void Page_Load(object sender, EventArgs e)
    {            
        log.Info("did I log yet?");
    }
    

    All of this does nothing as far as I can tell.

  • Jim Schubert
    Jim Schubert almost 14 years
    Thanks, this helped me to find the Oracle exception being thrown by log4net and to resolve my issue immediately.
  • Eric Smith
    Eric Smith about 12 years
    If you're using DebugView, try checking the Capture > Capture Global Win32 menu. I wasn't getting anything until I did that.
  • dotjoe
    dotjoe over 11 years
    so, if you do "Copy To Output" won't that put the log4net.config in your web app's bin directory as well as the site root?
  • Stefano
    Stefano over 10 years
    Can you please tell me where exactly should I add this piece of code? I have a .Net 4.0 web application.
  • Dave Thieben
    Dave Thieben over 10 years
    This is perfect for debugging why it's not working in a hosted environment! Thank you.