65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.86/5 (3投票s)

2016年4月9日

CPOL

2分钟阅读

viewsIcon

13880

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

引言

日志记录对于故障排除、活动跟踪和审计非常有用。每个项目都应该实现日志记录。有许多可用的日志记录技术,例如 log4net、跟踪侦听器等。那么企业库日志记录有什么不同?它简化了日志记录。它允许您选择希望存储日志的位置,并轻松管理其余事项。

背景

本文将帮助您使用企业库日志记录在 Azure 数据库中实现日志记录。任何使用 Azure 数据库连接的 C# 项目都可以使用相同的数据库来实现此日志记录。

Using the Code

步骤

  1. 安装以下 NuGet 包
    • 企业库日志记录
    • Windows Azure 配置管理
  2. 成功安装企业库日志记录包后,打开该包文件夹,您将看到如下所示的脚本文件

  3. 由于您已经创建了 Azure 数据库,只需在数据库中运行第二个脚本即可。
  4. 需要 Windows Azure 配置管理器包才能在 Azure 端应用日志记录配置。(注意:如果您尝试在没有此包的情况下进行日志记录,日志将存储在本地数据库中,但不会存储在 Azure 数据库中。)
  5. 需要进行以下配置设置
    • <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>
  6. 在此处检查 DLL 版本,您可能会使用不同的版本。
  7. 现在,您的 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;
                  }
              }
          }
  8. 我根据我的要求添加了错误逻辑,您可以根据您的代码和要求进行编辑和更改。
  9. 现在,只需调用这些函数来记录您的条目即可。
  10. 就这样!

 

© . All rights reserved.