2012-01-20 17 views
7

http://logging.apache.org/log4net/release/config-examples.htmllàm thế nào để xác định một tham số liên tục khi sử dụng AdoNetAppender log4net của

Với bảng đăng nhập ở đây:

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL, 
    [Date] [datetime] NOT NULL, 
    [Thread] [varchar] (255) NOT NULL, 
    [Level] [varchar] (50) NOT NULL, 
    [Logger] [varchar] (255) NOT NULL, 
    [Message] [varchar] (4000) NOT NULL, 
    [Exception] [varchar] (2000) NULL, 

    [Product] [varchar] 100 not null 
) 

và appender cấu hình ở đây:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="100" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [Product]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @product)" /> 
    <parameter> 
     <parameterName value="@log_date" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@thread" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%thread" /> 
     </layout> 
    </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="@logger" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
     </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="2000" /> 
     <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 

Làm thế nào tôi có thể thêm một hằng số tham số cho cột "sản phẩm" mà không có bất kỳ thay đổi mã nào? Chỉ thay đổi cấu hình nếu có thể!

Ví dụ, tôi muốn làm một cái gì đó như thế này:

<parameter> 
    <parameterName value="@product" /> 
    <dbType value="String" /> 
    <size value="100" /> 

    <constantValue value="Product A" /> <!-- how do i do this? --> 

</parameter> 

EDIT: Câu trả lời rất đơn giản. Chỉnh sửa văn bản lệnh!

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception], [Product]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, 'Product A')" /> 

Trả lời

10

Trong khi bạn chỉ có thể thêm một giá trị 'SomeConstant' để báo cáo kết quả chèn, chúng tôi sử dụng phương pháp sau đây với AdoNetAppender. Chúng tôi thêm cột @source vào bảng nhật ký của mình để chúng tôi có thể có nhiều máy chủ đăng nhập vào cùng một bảng, nhưng vẫn cung cấp cho chúng tôi một số chức năng giống như SYSLOG.

... 
    <commandText value="INSERT INTO Log ([Date],[Source],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @source, @log_level, @logger, @message, @exception)" /> 

    ... 
    <parameter> 
    <parameterName value="@source"/> 
    <dbType value="String"/> 
    <size value="32"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="WEB1"/> 
    </layout> 
    </parameter> 

PatternLayout sẵn sàng chấp nhận hằng số chuỗi, tại sao làm phức tạp nó!

Tận hưởng.

-1

Tôi cho rằng bạn có thể làm điều này:

using System.IO; 
using log4net.Core; 
using log4net.Layout; 

namespace MyApp 
{ 
    public class ConstantLayout : LayoutSkeleton 
    { 
    public string Text { get; set; } 

    public override void ActivateOptions() 
    { 
    } 

    public override void Format(TextWriter writer, LoggingEvent loggingEvent) 
    { 
     using (writer) 
     writer.Write(this.Text); 
    } 
    } 
} 

và sau đó ..

<parameter> 
    <parameterName value="@product" /> 
    <dbType value="String" /> 
    <size value="100" /> 
    <layout type="MyApp.ConstantLayout"> 
     <text value="Product A" /> 
    </layout> 
    </parameter> 
Các vấn đề liên quan