为什么Log4Net不能在Azure存储上使用表存储?

时间:2013-03-14 11:20:46

标签: azure log4net

拼命寻求解决方案,让log4net在Azure辅助角色中运行。慢慢地让我开玩笑。

我已按照此博客http://blog.tylerdoerksen.com/2012/04/17/logging-in-azure-part-2table-storage(谢谢)中列出的步骤进行操作,这似乎有意义,log4net日志记录在以下条件下就像梦一样:

  1. 在本地模拟器中运行辅助角色并将日志保存到本地存储
  2. 在本地模拟器中运行辅助角色并将日志持久保存到远程登台Azure表存储
  3. 当我将工作者角色服务部署到Azure时,它会在LogEntities表中记录任何内容。就是这一点,这一点非常令人沮丧。

    我已在Worker Role app.config中打开log4net调试,我在WADLogsTable中看到以下跟踪

      
        

    log4net:完成名为[TableStorageAppender]的appender。

      

    就是这样。没有其他log4net调试信息,我通常希望看到自添加

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

    到我的工作者角色app.config。

    我正在使用Worker Role overridden Run方法配置log4net:

    public override void Run()
     {
            try
            {
    
                XmlConfigurator.Configure();
                ILog Logger = LogManager.GetLogger(GetType());
                Trace.WriteLine("Trace: CheckInService.Run()");
                Logger.Info("log4net: CheckInService.Run()");
                //open the Service and do some other stuff etc 
                while (true)
                {
                    Thread.Sleep(1800000);
                }
            catch (Exception ex)
            {
                Trace.TraceError("There was a problem opening the CheckInService");
            }
     }
    

    这是我的完整app.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" name="log4net" />
      </configSections>
      <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
      </appSettings>
      <log4net>
        <appender type="Cloud.Services.Logging.TableStorageAppender, Cloud.Services.Logging" name="TableStorageAppender">
        </appender>
        <root>
          <level value="All" />
          <appender-ref ref="TableStorageAppender" />
        </root>
      </log4net>
      <system.diagnostics>
        <trace autoflush="true">
          <listeners>
            <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
              name="AzureDiagnostics">
              <filter type="" />
            </add>
          </listeners>
        </trace>
      </system.diagnostics>
    </configuration>
    

    日志记录appender(TableStorageAppender)实现在它自己的Assembly(Cloud.Services.Logging)中,但我假设这没有任何区别?

    有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

发布到Azure时是否包含Cloud.Services.Logging程序集(CopyLocal = True)?

答案 1 :(得分:0)

也许是一个缓冲问题?尝试在appender配置https://github.com/stemarie/log4net.Azure/issues/20#issuecomment-135891543

中设置bufferSize = 1