Log4net在Web服务中

时间:2014-01-07 16:22:12

标签: asp.net service web log4net

我基本上和

有同样的问题

log4net only works when XmlConfigurator.Configure() is called

然而,由于我没有任何声誉(刚刚注册),我无法在那里发表评论。

感谢任何有用的评论。 如果我在这里做错了,请告知。 非常感谢你。贝恩德

更新: 感谢您的建设性提示。我已经取得了一些进展,因此将更详细地解释: 我在一个(VS生成的C#Web服务)中使用log4net。我确实在调试文件中获得了调试信息,但是在VS(2012)中,我确实收到了每个日志记录调用的消息:

log4net:ERROR在检索堆栈帧信息时发生异常。 System.NullReferenceException:Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt。    bei log4net.Core.StackFrameItem..ctor(StackFrame frame)

编码:

我是通过xml-File配置的:

<?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>

我的网络服务如下:

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");
    }
}

希望这是足够的。 LoggingUtil-类基本上如下所示:

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

我想知道,如果问题是无法在Cassine中找到堆栈跟踪,因为Microsoft不允许这样做以保护其Web服务的实现?

1 个答案:

答案 0 :(得分:5)

正如here所解释的,当调用链中存在动态方法时会发生此错误。

他们声称在版本&gt;中修复了此错误1.12.2