Question

I basically have the same question as

log4net only works when XmlConfigurator.Configure() is called

However, I couldn't comment there as I don't have any reputation (just signed up).

Thanks for any helpful comments. If I do anything wrong here, please advise. Thank you very much. Bernd

Update: Thanks for constructive hints. I've have made some progress and therefore will explain in more detail: I use log4net within a (VS generated C# web service). I do get the debug information in the debug file, however within VS (2012) I do get the message for every logging call:

log4net:ERROR An exception ocurred while retreiving stack frame information.
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
     bei log4net.Core.StackFrameItem..ctor(StackFrame frame)

I configured it via XML:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>  
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="Logs/debug.log" />
    <encoding value="utf-8" />
    <appendToFile value="true" />
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="2" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level (%class#%method:%line):%message%newline" />
    </layout>
  </appender>
  <root>
    <level value="DEBUG" />    
    <appender-ref ref="RollingFile" />
  </root>
</log4net>

My web service looks like this:

public class ObjectInfo : IObjectInfo
{    
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);



    public void DoWork()        {
      Logging.LoggingUtil.InitializeLogging();
      log.Debug("Some message");
    }
}

Hope this is quite sufficient. The LoggingUtil- class basically looks like this:

private const String Log4NetConfigurationFilePath = "log4net-config.xml"; //real path looks somewhat different
public static void InitializeLogging()
{    
  XmlConfigurator.Configure(new FileInfo(Log4NetConfigurationFilePath));     
}

I wonder, if the problem is that the stack trace cannot be found out within Cassine as Microsoft doesn't allow this in order to protect their implementation of the web service?

Était-ce utile?

La solution

As explained in LOG4NET-393, this error occurs when there is a dynamic method in the call chain.

There they claim to have this error fixed in versions > 1.2.12.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top