最近,我们将我们的解决方案 (ASP.NET MVC4) 移至 Windows Azure,到目前为止,它运行良好。我们唯一担心的是,无论我们实现什么方法,我们都无法找到我们的日志文件:
实际上,我们现有的应用程序使用 log4net 框架进行日志记录。一旦我们在 Windows Azure 上移动了我们的解决方案,我们仍然希望在 azure 中使用 log4net,而对现有代码的更改最少。为了实现以下方法,我们关注了许多博客和教程:
- 使用 Windows Azure 诊断模块将日志文件同步到 Blob 存储。
- 使用自定义 log4net appender 直接写入表存储。
- 记录到 Trace 日志并同步到表存储。
不幸的是,以上都没有达到预期的结果。我们仍然无法访问我们的日志。有没有关于如何在 Windows Azure 中使用 Log4net 的官方资料?
第 1 步:我导入了 Log4net.Azure 作为对我的 MVC4 WebRole 应用程序的引用
Step2:我在 WebRole 类的 On_Start 方法中添加了配置行
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();
}
第三步:我在需要记录的时候创建了一个 ILog 实例,这里是一个例子:
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 :)";
}
}