在 Azure 数据库中使用企业库日志记录






3.86/5 (3投票s)
在 Azure 数据库中使用企业库日志记录
引言
日志记录对于故障排除、活动跟踪和审计非常有用。每个项目都应该实现日志记录。有许多可用的日志记录技术,例如 log4net、跟踪侦听器等。那么企业库日志记录有什么不同?它简化了日志记录。它允许您选择希望存储日志的位置,并轻松管理其余事项。
背景
本文将帮助您使用企业库日志记录在 Azure 数据库中实现日志记录。任何使用 Azure 数据库连接的 C# 项目都可以使用相同的数据库来实现此日志记录。
Using the Code
步骤
- 安装以下 NuGet 包
- 企业库日志记录
- Windows Azure 配置管理 器
- 成功安装企业库日志记录包后,打开该包文件夹,您将看到如下所示的脚本文件
- 由于您已经创建了 Azure 数据库,只需在数据库中运行第二个脚本即可。
- 需要 Windows Azure 配置管理器包才能在 Azure 端应用日志记录配置。(注意:如果您尝试在没有此包的情况下进行日志记录,日志将存储在本地数据库中,但不会存储在 Azure 数据库中。)
- 需要进行以下配置设置
- 在
<configSections>
中<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/>
- 在
<configuration>
中,添加以下代码,其中有一个选项可以在“databaseInstanceName
”字段中定义数据库上下文名称。 在那里指定您的 Azure 数据库上下文名称。<loggingConfiguration name="loggingConfiguration" tracingEnabled="true" defaultCategory="General"> <listeners> <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.1304.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType=" Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" databaseInstanceName="{database context name}" writeLogStoredProcName="WriteLog" addCategoryStoredProcName="AddCategory" traceOutputOptions="DateTime, Timestamp, ProcessId"/> </listeners> <categorySources> <add switchValue="All" name="General"> <listeners> <add name="Database Trace Listener"/> </listeners> </add> </categorySources> <specialSources> <allEvents switchValue="All" name="All Events"> <listeners> <add name="Database Trace Listener"/> </listeners> </allEvents> <notProcessed switchValue="All" name="Unprocessed Category"> <listeners> <add name="Database Trace Listener"/> </listeners> </notProcessed> <errors switchValue="All" name="Logging Errors & Warnings"> <listeners> <add name="Database Trace Listener"/> </listeners> </errors> </specialSources> </loggingConfiguration>
- 在
- 在此处检查 DLL 版本,您可能会使用不同的版本。
- 现在,您的 Azure 数据库中有了日志表以及用于写入日志的存储过程。您只需要一段代码来调用它。让我们为
log
创建一个单独的类-
public static class Log { static Log() { DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory(), false); Logger.SetLogWriter(new LogWriterFactory().Create(), false); } public static void AddError(Exception exception, int priority = 0, string jsonModel = null) { try { var msgBody = new StringBuilder(); msgBody.AppendLine("-----WebJobException Begin: {0}-----"); msgBody.AppendLine(string.Format("\tHostName: {0}", Dns.GetHostName())); msgBody.AppendLine(string.Format("\tSiteName: {0}", HostingEnvironment.SiteName)); msgBody.AppendLine(string.Format("\tAction: {0}", exception.TargetSite)); msgBody.AppendLine(string.Format("\tModel: {0}", jsonModel)); msgBody.AppendLine(string.Format("\tExceptionType: {0}", exception.GetType())); msgBody.AppendLine(string.Format("\tExceptionMessage: {0}", exception.Message)); msgBody.AppendLine(string.Format("\tStackTrace: {0}", exception.StackTrace)); if (exception.InnerException != null) { msgBody.AppendLine(string.Format("\tInnerExceptionType: {0}", exception.InnerException.GetType())); msgBody.AppendLine(string.Format("\tInnerExceptionMessage: {0}", exception.InnerException.Message)); msgBody.AppendLine(string.Format("\tInnerExceptionStackTrace: {0}", exception.InnerException.StackTrace)); } msgBody.AppendLine("-----WebJobException End: {0}-----"); WriteLog(msgBody.ToString(), TraceEventType.Error); } catch (Exception ex) { return; } } public static void AddInformation(string message) { try { WriteLog(message, TraceEventType.Information); } catch (Exception ex) { return; } } private static void WriteLog(string message, TraceEventType information) { try { var logEntry = new LogEntry { Message = message, Severity = information }; Logger.Write(logEntry); } catch (Exception ex) { return; } } }
-
- 我根据我的要求添加了错误逻辑,您可以根据您的代码和要求进行编辑和更改。
- 现在,只需调用这些函数来记录您的条目即可。
- 就这样!