我有一个Azure WebRole,我正在尝试使用DiagnosticMonitor配置日志记录。
根据windowsazure.com上的文档,日志应该在OnStart中实现:
Note: The code in the following steps is typically added to the OnStart method of the role.
https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/
为了访问OnStart方法,我必须定义一个RoleEntryPoint。但是一旦定义了,我就无法访问Web应用程序Application_Start中的RoleEnvironment。
如何在仍然能够使用DiagnosticMonitor的同时使RoleEnvironment可用于应用程序?
我将应用程序连接字符串存储在服务配置中。
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
// config
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "wad-mycustomlogs-container";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);
diagMonitorConfig.Directories.DataSources.Add(dirConfig);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
return base.OnStart();
}
答案 0 :(得分:1)
我已经解决了。
清理完解决方案后,重建,重新启动IIS,关闭azure仿真器并重新启动Visual Studio,它突然开始工作。
我根本没有改变任何代码。
(我甚至在张贴之前做了所有这些事情,但只有在我同时完成所有事情时才有效)
答案 1 :(得分:0)
这绝对是正确的代码示例集。您需要在角色中设置所有这些,但不要在Web应用程序中设置。
注意:由于Azure现在具有完整的IIS,因此RoleEntryPoint On_start与Web应用程序之间的上下文不同,后者在IIS中的自己的工作池中运行。
快速健全检查清单:
如果您在Azure模拟器中运行应用程序或部署到Azure本身,只要您具有相关的DLL引用,就可以从IIS应用程序中获得RoleEnvironment。如果您可以在代码中使用RoleEnvironment.IsAvailable进行构建,则会包含库。我唯一能想到的是你直接运行网站,而不是在Azure模拟器中运行。
将Cloud项目设置为Visual Studio中的启动项,您应该是金色的。