0

I am trying to add a new rolling file appender to an existing log4net configuration. I have been looking at questions on S.O. and looking at the documentation however I can't seem to see where my issue is.

The problem is that it creates the file but never writes to it. All I can come up with is that somehow I have misunderstood how the hierarchies work? If I attached a debugger I can see the line get written to the console but even when I did a test deploy the log file document never has anything written to it. There are other questions about this however they all have issue with levelMin or something like that. I have tried setting my config to ALL, didn't help either.

Here is complete config so you can see what I am talking about.

<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">

  <root>
    <level value="ALL"/>
    <appender-ref ref="CompassServiceTraceAppender" />
    <appender-ref ref="EventLogAppender" />
    <appender-ref ref="DbAppender" />
  </root>

  <logger name="Compass.Service.Implementation.EdiService">
    <level value="ALL"/>
    <appender-ref ref="EventProcessingFailureLogFileAppender" />
  </logger>

  <logger name="Compass.Service.Implementation.PhoneService">
    <level value="ALL"/>
    <appender-ref ref="LivevoxResultsReprocessorAppender"/>
  </logger>

  <logger name="DocumentImportLogger">
    <level value="ALL"/>
    <appender-ref ref="DocumentLogFileAppender" />
  </logger>

  <logger name="NHibernate">
    <level value="ERROR"/>
    <appender-ref ref="CompassServiceTraceAppender" />
    <appender-ref ref="EventLogAppender" />
    <appender-ref ref="DbAppender" />
  </logger>

  <appender name="DbAppender" type="log4net.Appender.AdoNetAppender">
    <threshold value="WARN" />
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=.;initial catalog=logDb;integrated security=True;persist security info=True;" />
    <commandText value="INSERT INTO ErrorLog ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Environment],[Application],[User],[ObjectName],[ObjectId],[SupportId]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, 'localhost','Compass BB', @user, @objectName, @objectId, @supportId)" />
    <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>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout" value="%exception" />
    </parameter>
    <parameter>
      <parameterName value="@user" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout" value="%property{CurrentUser}" />
    </parameter>
    <parameter>
      <parameterName value="@objectName" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout" value="%property{ObjectName}" />
    </parameter>
    <parameter>
      <parameterName value="@objectId" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout" value="%property{ObjectId}" />
    </parameter>
    <parameter>
      <parameterName value="@supportId" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout" value="%property{SupportId}" />
    </parameter>
  </appender>

  <appender name="CompassServiceTraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level - %message%newline" />
    </layout>
  </appender>

  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    <threshold value="WARN" />
    <param name="ApplicationName" value="Compass Best Benefits Service Host" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level %logger %newline User: %property{CurrentUser} Object: %property{ObjectName} Id: %property{ObjectId} %newline %message %newline %exception"/>
    </layout>
  </appender>

  <appender name="EventProcessingFailureLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <threshold value="ALL" />
    <param name="File" value="c:\logs\EventProcessingFailure_log.txt" />
    <param name="AppendToFile" value="true" />
    <param name="RollingStyle" value="Date" />
    <param name="DatePattern" value="yyyy.MM.dd" />
    <param name="StaticLogFileName" value="true" />
    <param name="maxSizeRollBackups" value="10" />
    <param name="maximumFileSize" value="1000KB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %level %logger - %message %newline %exception" />
    </layout>
  </appender>

  <appender name="LivevoxResultsReprocessorAppender" type="log4net.Appender.RollingFileAppender">
    <threshold value="ALL" />
    <param name="File" value="c:\logs\Livevoxreprocessor.txt" />
    <param name="AppendToFile" value="true" />
    <param name="RollingStyle" value="Date" />
    <param name="DatePattern" value="yyyy.MM.dd" />
    <param name="StaticLogFileName" value="true" />
    <param name="maxSizeRollBackups" value="10" />
    <param name="maximumFileSize" value="1000KB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message %newline" />
    </layout>
  </appender>

  <!--DocumentLogFileAppender-->
  <appender name="DocumentLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <threshold value="ALL" />
    <param name="File" value="c:\logs\DocumentLog.txt" />
    <param name="AppendToFile" value="true" />
    <param name="RollingStyle" value="Date" />
    <param name="DatePattern" value="yyyy.MM.dd" />
    <param name="StaticLogFileName" value="true" />
    <param name="maxSizeRollBackups" value="10" />
    <param name="maximumFileSize" value="1000KB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message %newline" />
    </layout>
  </appender>


</log4net>

Here is the code example.

 private static readonly HALogger Logger = new HALogger("DocumentImportLogger");
//which calls 
        public HALogger(string loggerName)
        {
            _logger = LogManager.GetLogger(loggerName);
        }

//Then to log.
    Logger.Info(string.Format("Checking for new documents - LastDocumentId: {0}", LastDocInfo.LastDocumentId));

1 Answer 1

1

Your config file looks fine to me.

The problem is that log4net silently ignores configuration errors by default and just silently fails - which is a sensible design choice for a logging framework but can be frustrating at times.

You can try enabling internal debugging and programmatically checking for configuration errors.

See the log4net faq => the relevant sections are:

"How do I enable log4net internal debugging?"

"How can I evaluate configuration errors at runtime?"

Also, please add a code example of how you obtain a logger and try writing to it.

Not the answer you're looking for? Browse other questions tagged or ask your own question.