我有一个非常简单的MVC Core 2.2应用程序,该应用程序利用Serilog和serilog-sinks-azure-analytics(https://github.com/saleem-mirza/serilog-sinks-azure-analytics)将应用程序日志通过管道传输到Azure日志分析工作区。在Program.cs
中,实现看起来像这样public static void Main(string[] args)
{
var workspaceId = Configuration["AzureLogging:workspaceId"];
var authenticationId = Configuration["AzureLogging:authenticationId"];
var logName = Configuration["AzureLogging:logName"];
//Configure Serilog to add Azure Logging
Log.Logger = new LoggerConfiguration()
.WriteTo.AzureAnalytics(
workspaceId: workspaceId,
authenticationId: authenticationId,
logName: logName
)
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.MinimumLevel.Override("System", LogEventLevel.Warning)
.CreateLogger();
CreateWebHostBuilder(args).Build().Run();
}
它整天收集日志,然后显然停止了,因为当我通过日志分析工作区查询最后几个小时时,它什么也没有返回。如果最近7天运行查询,我会得到350条记录,这很有趣。
接收器项目的文档指出,默认情况下,logBufferSize为25,000个条目,因此似乎无法达到目的。
对于如何诊断我的日志或日志为什么失败的任何建议,我将不胜感激。
谢谢。
答案 0 :(得分:0)
每个日志分析工作区最多只能有500个自定义字段。
转到Azure门户> <security-constraint>
<display-name>Admin Constraint</display-name>
<web-resource-collection>
<web-resource-name>Admin</web-resource-name>
<url-pattern>/console/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>Console Admin</description>
<role-name>admin</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>console-realm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/loginError.xhtml</form-error-page>
</form-login-config>
</login-config>
> Log Analytics workspace
> advanced settings
-> Data
,然后检查计数。
您可以使用Serilog.Sinks.AzureAnalytics
。该接收器接受选项参数Custom fields for the current field count
,该参数指示在导出到Azure时是否应展平对象属性。将其设置为false将在flattenObject
属性中保留复杂的对象结构。
有关更多详细信息,您可以参考此issue。