我使用带有跟踪开关的自定义 TraceSources
来检测我的 Azure 应用服务 Web 应用程序 (.Net 4.6.1),以便我可以在运行时对跟踪量进行精细控制。发布到我的 Azure 网站后,从 Azure 输出的流日志中没有出现任何跟踪语句。当我将 Trace.WriteLine
语句放入代码中时,我看到它们出现。
Trace.WriteLine("Great Success");
TraceSources.Session.Warn("Ultimate Failure");
有一个handful of articles在 2012-2014 年的网络上,它表明向我的自定义源添加 AzureDriveTraceListener
监听器将导致我的数据出现在流日志中,但 AzureDriveTraceListener
不会似乎得到了 Microsoft 的官方支持,并且它所在的 Microsoft.WindowsAzure.WebSites.Diagnostics
程序集无法从 Azure SDK(当前为 2.9)或 NuGet 中获得(尽管有人已经在那个名字)。 This guy asked a similar SO question years ago ,但这是关于模拟器的。
是否有官方或批准的方式在 Azure 诊断日志中显示 TraceSource.TraceEvent
或 Traceinformation
语句?
最佳答案
Is there an alternative to AzureDriveTraceListener to get TraceSource events to appear in Azure web site streaming logs?
是的,我们可以使用 AzureDriveTraceListener 来做到这一点。我为它做了一个测试演示。 以下是我的详细步骤:
1.创建Asp.net项目
2.引用Microsoft.WindowsAzure.WebSites.Diagnostics SDK。
3.在web.config文件中添加以下配置
<system.diagnostics>
<sharedListeners>
<add name="AzureDriveTraceListener" type="Microsoft.WindowsAzure.WebSites.Diagnostics.AzureDriveTraceListener, Microsoft.WindowsAzure.WebSites.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</sharedListeners>
<sources>
<source name="TraceSourceLogging" switchName="TestSwitch" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add name="AzureDriveTraceListener"/>
</listeners>
</source>
</sources>
<switches>
<add name="TestSwitch" value="Verbose" />
</switches>
</system.diagnostics>
4.在工程中添加AppTrace类,我们可以从 blog 获取演示代码
public static class AppTrace
{
public static TraceSource TraceSource { get; set; }
static AppTrace()
{
TraceSource = new TraceSource("TraceSourceLogging")
{
Switch = {Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), "All", true)}
};
}
private static string Format(string message, string memberName, string filePath, int lineNumber)
{
return $"Message: {message}, MemberName: {memberName}, FilePath: {filePath}, LineNumber: {lineNumber}";
}
public static void Verbose(string message, int id = 16, [CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Verbose, id, Format(message, memberName, filePath, lineNumber));
}
public static void Error(string message, int id = 2, [CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Error, id, Format(message, memberName, filePath, lineNumber));
}
public static void Information(string message, int id = 8, [CallerMemberName] string memberName = "",
[CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Information, id, Format(message, memberName, filePath, lineNumber));
}
public static void Critical(string message, int id = 1, [CallerMemberName]string memberName =
"", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Critical, id, Format(message, memberName, filePath, lineNumber));
}
public static void Warning(string message, int id = 4, [CallerMemberName]string memberName =
"", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Warning, id, Format(message, memberName, filePath, lineNumber));
}
public static void Start(string service, int id = 256, [CallerMemberName]string memberName =
"", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Start, id, Format("Starting - " + service, memberName, filePath, lineNumber));
}
public static void Stop(string service, int id = 512, [CallerMemberName]string memberName =
"", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0)
{
TraceSource.TraceEvent(TraceEventType.Stop, id, Format("Stoping - " + service, memberName, filePath, lineNumber));
}
}
5.添加测试页面。
protected void Page_Load(object sender, EventArgs e)
{
AppTrace.Verbose("Test Verbose");
AppTrace.Error("Test Error");
AppTrace.Warning("Test Warning");
AppTrace.Information("Test Information");
AppTrace.Critical("Test Critical");
Label1.Text = "Completed";
}
6.将项目发布到Azure。
7.访问该页面并从Azure门户检查
关于azure - 是否有 AzureDriveTraceListener 的替代方法可以让 TraceSource 事件出现在 Azure 网站流日志中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45181357/