azure - Azure 上的 Log4Net

标签 azure logging storage log4net

我已经尝试了所有可能在网上找到的方法来让 log4net 与 Azure 一起使用,但还没有运气,因为大多数文档都非常过时。如果有人可以使用最新的 Azure SDK 和 Log4Net 版本,并且可以将我推向正确的方向,我将不胜感激。

似乎有很多不同的方法可以做到这一点,但我还没有像许多示例所建议的那样将其附加到表、blob 或数据库。

最佳答案

要在 Azure 网站或 Web 角色中将 SQL 或 Azure SQL 与 log4net 结合使用:

在数据库中创建日志表:

/****** Object:  Table [dbo].[Log]    Script Date: 4/3/2015 6:32:43 PM 
******/
SET ANSI_NULLS OFF
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Log](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Date] [datetime] NULL,
    [Level] [nvarchar](50) NULL,
    [Message] [nvarchar](4000) NULL,
    [Exception] [nvarchar](4000) NULL,
    [RemoteHost] [nvarchar](50) NULL,
    [Cookie] [nvarchar](4000) NULL,
    [Url] [nvarchar](200) NULL,
    [QueryString] [nvarchar](1000) NULL,
    [Referrer] [nvarchar](200) NULL,
    [RequestMethod] [nvarchar](10) NULL,
    [ScriptPath] [nvarchar](150) NULL,
    [UserAgent] [nvarchar](1000) NULL,
    [Domain] [nvarchar](50) NULL,
    [CustomBlob] [varchar](max) NULL,
 CONSTRAINT [PrimaryKey_11579ccd-53dd-4bcc-a813-cb4cfb7b6b88] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

GO

SET ANSI_PADDING OFF
GO

修改您的 web.config 文件:

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data,  Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="...[your connectionString]..." />
      <commandText value="INSERT INTO Log ([Date],[Level],[Message],[Exception],[RemoteHost],[Cookie],[Url],[QueryString],[Referrer],[RequestMethod],[ScriptPath],[UserAgent],[Domain],[CustomBlob]) VALUES                     (@log_date, @log_level, @message, @exception,@remote_host,@cookie,@url,@query_string,@referrer,@request_method,@script_path,@user_agent,@domain,@custom_blob)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
      <parameter>
        <parameterName value="@remote_host" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{RemoteHost}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@cookie" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Cookie}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@url" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Url}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@query_string" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{QueryString}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@referrer" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Referrer}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@request_method" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{RequestMethod}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@script_path" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{ScriptPath}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@user_agent" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{UserAgent}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@domain" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{Domain}" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@custom_blob" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%property{CustomBlob}" />
        </layout>
      </parameter>
    </appender>

    <root>
      <level value="All" />
      <appender-ref ref="AdoNetAppender" />
    </root>
  </log4net>

关于azure - Azure 上的 Log4Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440356/

相关文章:

c# - 从内存流添加附件

Python HTTP 请求和调试级别记录到日志文件

mysql - 对于审计日志记录,哪种技术最好?

Cassandra READ Where In 性能

azure - 将conf文件添加到Microsoft Azure中的类路径

c# - Azure ServiceBus 消息序列化/反序列化

c++ - 使用 ostream 标志作为详细调试标志

Android将文件保存到外部存储

regex - Dart/Flutter 读写列表列表 - 为什么我无法使用索引号访问列表列表中的对象?

azure - Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling RetryPolicy 和 Microsoft.ServiceBus.dll