当前位置: 首页 > 编程语言 > C#

SerilogMSSQLSink不会向数据库写入日志分享

时间:2023-04-11 02:32:56 C#

SerilogMSSQLSink不会向数据库写入日志我创建了一个.Net类库(4.6.2)并创建了一个serilog实现,实现方式是其他接口(例如控制台应用程序)调用。现在,当我使用文件接收器类型时,日志被写入文件,但使用MSSQL接收器时,它没有这样做。connectionString,tableName,autoCreateSqlTable:autoCreateSqlTable,restrictedToMinimumLevel:LogEventLevel.Verbose,columnOptions:GetSQLSinkColumnOptions(),batchPostingLimit:batchPostingLimit).CreateLogger();我还启用了serilog的自记录,但没有显示异常。找不到任何有用的解决方案。但是生成了日志表。我检查了用户的权限,它也有正确的权限。下面是代码的快照。公共静态类GenericLogger{私有静态ILogger_usageLogger;私有静态ILogger_errorLogger;staticGenericLogger(){varlogTypes=LogConfigurationHelper.GetLogTypes();if(logTypes!=null&&logTypes.Count>0){foreach(varlogTypeinlogTypes){ConfigureLogger(logType.Id);//根据配置初始化日志。}}Serilog.Debugging.SelfLog.Enable(msg=>{Debug.Print(msg);Debugger.Break();});}///写日志函数///publicstaticvoidWriteError(LogDetailinfoToLog){if(infoToLog.Exception!=null){infoToLog.Message=GetMessageFromException(infoToLog.Exception);}_errorLogger.Write(LogEventLevel.Information,"{Timestamp}{Product}{Layer}{Location}{Message}"+"{Hostname}{UserId}{UserName}{Exception}{ElapsedMilliseconds}"+"{CorrelationId}{CustomException}{AdditionalInfo}",infoToLog.TimeStamp,infoToLog.Product,infoToLog.Layer,infoToLog.Location,infoToLog.Message,infoToLog.Hostname,infoToLog.UserId,infoToLog.UserName,infoToLog.Exception?.ToCustomString(),infoToLog.ElapsedMilliseconds,infoToLog.CorrelationId,infoToLog.CustomException,infoToLog.AdditionalInfo);//添加((IDisposable)_errrorLog).Dispose();}}这里有一些想法可以帮助您排除故障:您是仅使用Verbose还是Debug事件进行测试?这可能是你没有为Serilog指定全局最低级别的原因(你只为接收器指定了最低级别,它充当过滤器),默认的最低级别是Information,这意味着Verbose和Debug将被忽略。.globalMinimumLevelforMinimumLevel:ILoggerlogger=newLoggerConfiguration().MinimumLevel.Verbose().WriteTo.MSSqlServer(connectionString,tableName,autoCreateSqlTable:autoCreateSqlTable,restrictedToMinimumLevel:LogEventLevel.Verbose,columnOptions:GetSQLSinkColumnOptions(),batchPostingLimit:batchPostingLimit).CreateLogger();你正在处理你的记录器吗?Serilog.Sinks.MSSqlServer是一个“定期批处理接收器”,因此您需要确保在最后处理记录器以强制其将日志刷新到数据库。请参阅记录器生命周期。((IDisposable)记录器).Dispose();即使您使用1作为batchPostingLimit,它在将日志发送到数据库之前默认等待5秒。如果您的应用在此期间之前关闭并且您没有丢弃记录器,则消息将会丢失。要排除故障,请使用AuditTo而不是WriteTo(并删除不适用于审核的batchPostingLimit)。WriteTo是安全的,会吃掉任何异常,而AuditTo会让异常弹出。ILoggerlogger=newLoggerConfiguration().AuditTo.MSSqlServer(connectionString,tableName,restrictedToMinimumLevel:LogEventLevel.Verbose,autoCreateSqlTable:true).CreateLogger();当然,一旦您弄清楚出了什么问题,请返回WriteTo。以上就是C#学习教程:SerilogMSSQLSink不会将日志写入数据库分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: