是否有替代AzureDriveTraceListener以使TraceSource事件出现在Azure网站流式传输日志中?
我已经使用自定义TraceSources
跟踪开关检测了我的Azure应用服务Web应用程序(.Net 4.6.1),以便在运行时可以精确控制跟踪卷。发布到我的Azure网站后,没有任何跟踪语句出现在Azure输出的流式日志中。当我在代码中放入Trace.WriteLine
声明时,我看到它们出现。是否有替代AzureDriveTraceListener以使TraceSource事件出现在Azure网站流式传输日志中?
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
语句?
是否有替代AzureDriveTraceListener让TraceSource事件出现在Azure网站流式传输日志中?
是的,我们可以使用AzureDriveTraceListener来做到这一点。我为它做了一个测试演示。 以下是我的详细步骤:
1,创建一个Asp.net项目
2.Reference的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.Visit的页面,并从Azure的门户检查
谢谢汤姆孙我知道它是有效的,但是微软没有任何AzureDriveTraceListener的官方文档,所以我不知道是否可以安全地使用该未公开的功能。它也不适用于本地调试,因此它只是一个在发布转换中添加此选项的选项。这个问题已经以某种形式被问及5年了,并且预计会看到来自MS的官方说明如何实现这一点。 – Josh
另外,链接到的NuGet包在Microsoft命名空间中,但它不是Microsoft发行版。我个人从未从Nuget下载任何声称为Microsoft软件包但未由官方Microsof源发布的任何内容 – Josh
从[nuget许可链接](https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE) ,我们可以知道sdk的版权是微软的,所以你可以很容易使用。 –