Log4net.Azure配置

时间:2013-07-09 12:30:11

标签: azure log4net azure-storage azure-web-roles

最近,我们将我们的解决方案(ASP.NET MVC4)移至Windows Azure,到目前为止,它正在运行 精细。我们唯一担心的是,无论如何我们都无法找到我们的日志文件 我们实施的方法:

实际上,我们现有的应用程序使用log4net框架进行日志记录。 一旦我们在Windows Azure上移动了我们的解决方案,我们仍然希望使用log4net 我们现有代码中的变化很小。  我们已经按照许多博客和教程来实现以下方法:

  1. 使用Windows Azure诊断模块将日志文件同步到blob存储。
  2. 使用自定义log4net appender直接写入表存储。
  3. 登录到跟踪日志并同步到表存储。
  4. 不幸的是,以上都没有达到预期的效果。我们还没有 能够访问我们的日志。有没有关于如何使用的官方消息来源 使用Windows Azure的Log4net?

    Step1:我导入Log4net.Azure作为我的MVC4 WebRole应用程序的参考

    步骤2:我在WebRole类的<_part方法中添加了配置行

         public class WebRole : RoleEntryPoint
    {
    
        private static readonly ILog _logger = LogManager.GetLogger(typeof(WebRole));
    
        public override void Run()
        {
            _logger.InfoFormat("{0}'s entry point called", typeof(WebRole).Name);
    
            while (true)
            {
                Thread.Sleep(10000);
                _logger.Debug("Working...");
            }
        }
    
        public override bool OnStart()
        {
            BasicConfigurator.Configure(AzureAppender.New(conf =>
            {
    
    
                conf.Level = "Debug";
    
                conf.ConfigureRepository((repo, mapper) =>
                {
                    repo.Threshold = mapper("Debug"); // root
                });
    
                conf.ConfigureAzureDiagnostics(dmc =>
                {
                    dmc.Logs.ScheduledTransferLogLevelFilter = LogLevel.Information;
                });
            }));
    
            return base.OnStart();
        }
    

    Step3:我创建了一个我需要记录的ILog whenevr实例,这是一个例子:

        public class TestController : ApiController
    {
    
        private static readonly ILog _logger = LogManager.GetLogger(typeof(WebRole));
    
        [HttpGet]
        public String Get()
        {
    
            _logger.InfoFormat("{0}'s entry point called", typeof(WebRole).Name);
            _logger.Debug("<<<<<<<<<< WS just invoked >>>>>>>>>>>>...");
    
            return "hello world logs on Azure :)";
        }
    }
    

3 个答案:

答案 0 :(得分:1)

您可以将AdoNetAppender与Azure SQL数据库一起使用并配置如下示例:http://logging.apache.org/log4net/release/config-examples.html

注意:使用以下语句创建Log表:

CREATE TABLE [dbo].[Log](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar](255) NOT NULL,
[Level] [varchar](50) NOT NULL,
[Logger] [varchar](255) NOT NULL,
[Message] [varchar](4000) NOT NULL,
[Exception] [varchar](2000) NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED (
  [Id] ASC
))

答案 1 :(得分:1)

Re:log4net.Azure

由于实现使用BufferingAppenderSkeleton基类(默认情况下缓冲区大小为512),因此日志不可见。您必须使应用程序在刷新之前在ram中创建513个日志条目。我这样做是为了让它更高效。

您有3个选项可以在MVC / ASP.NET环境中按照您的期望工作:

  1. 更改配置文件中的缓冲区大小
  2. 调用flush(但仅在调试模式下,这是性能杀手)
  3. 当您的应用程序关闭时调用flush,以便立即执行写入

答案 2 :(得分:0)

如果您在webrole中使用完整的IIS(这是默认配置),则网站和webrole将在seperate processes中运行。

因此,您必须设置两次日志记录。一旦进入WebRole的OnStart(),一次进入Global.asax的Application_Start()。