最近,我们将我们的解决方案(ASP.NET MVC4)移至Windows Azure,到目前为止,它正在运行 精细。我们唯一担心的是,无论如何我们都无法找到我们的日志文件 我们实施的方法:
实际上,我们现有的应用程序使用log4net框架进行日志记录。 一旦我们在Windows Azure上移动了我们的解决方案,我们仍然希望使用log4net 我们现有代码中的变化很小。 我们已经按照许多博客和教程来实现以下方法:
不幸的是,以上都没有达到预期的效果。我们还没有 能够访问我们的日志。有没有关于如何使用的官方消息来源 使用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 :)";
}
}
答案 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环境中按照您的期望工作:
答案 2 :(得分:0)
如果您在webrole中使用完整的IIS(这是默认配置),则网站和webrole将在seperate processes中运行。
因此,您必须设置两次日志记录。一旦进入WebRole的OnStart(),一次进入Global.asax的Application_Start()。