2009-06-17 2 views
7

Tôi đang gặp một thời gian khó khăn khi tìm tài liệu trên khác nhau 'trong hộp' các mẫu nhưCó một mô hình log4net cho MachineName

%logger 
%level 
%timestamp 

Có tất nhiên the example page nhưng tôi không chắc chắn đó là đầy đủ danh sách các tùy chọn.

Tôi cũng biết rằng có thể thông số MDC ra khỏi ứng dụng cho trình ghi nhật ký, nhưng điều đó liên quan đến thay đổi mã là một con thú khác với thay đổi cấu hình.

Có tùy chọn %machineName hoặc tùy chọn machineIP không? Vấn đề là chúng tôi có tất cả các máy chủ của chúng tôi trong trang web đăng nhập vào nhật ký cơ sở dữ liệu giống nhau, và chúng tôi đang nghĩ rằng một số lượng thông báo không cân xứng đến từ một máy.

Trả lời

2

Kiểm tra PatternString API, có vẻ như bạn sẽ cần sử dụng% thuộc tính trong mẫu của mình. Ngoài ra hãy xem this article, bạn có thể cần phải tiêm tên máy vào ngữ cảnh chung khi khởi động ứng dụng.

+0

@AgileJon - bài viết đó chính xác là những gì tôi đang tìm kiếm! Cảm ơn bạn!!! –

10
%property{log4net:HostName} 
11

Những gì tôi đã chỉ vấp ngã trên là

<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/> 

và điều đó dường như được làm việc --- tự hỏi những gì khác biệt là giữa điều này và các tùy chọn khác gợi ý. như %property{log4net:HostName}

+1

$ {...} tùy thuộc vào biến môi trường. –

+1

hoạt động trên tất cả các máy windows mà tôi đã thử. Rất hữu ích! –

+0

Tôi thích điều đó, tại sao phải phụ thuộc vào một lớp học tùy chỉnh nếu bạn không phải làm vậy? –

3

Tạo một lớp mà được tên máy:

using System; 
using System.IO; 
using log4net.Layout.Pattern; 

namespace YourNameSpace.Converters 
{ 
    public class MachinePatternConverter : PatternLayoutConverter 
    { 
     protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent) 
     { 
      writer.Write(Environment.MachineName);    
     } 
    } 
} 

sau đó thiết lập log4net của bạn cấu hình như sau:

<layout type="log4net.Layout.PatternLayout"> 
    <converter> 
     <name value="machine" /> 
     <type value="YourNameSpace.MachinePatternConverter" /> 
    </converter> 
    <conversionPattern value="%date [%thread] %level %logger %machine" /> 
</layout> 

Tôi thích phương pháp này vì có thể sử dụng lại và tôi có thể quản lý thông tin theo cách tôi muốn . Nếu bạn muốn đăng nhập địa chỉ ip ví dụ, chỉ cần làm như vậy và tạo ra bộ chuyển đổi như sau:

public class IPPatternConverter : PatternLayoutConverter 
{ 
    protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent) 
    { 
     if (HttpContext.Current == null) 
      return; 

     writer.Write(HttpContext.Current.Request.UserHostAddress); 
    } 
} 

Thông tin thêm về liên kết: http://devstuffs.wordpress.com/2012/01/12/creating-your-own-pattern-layout-converter-for-log4net/

2

Sử dụng câu trả lời này https://stackoverflow.com/a/2096452/1224858 về việc thêm thuộc tính GlobalContext, tôi có thể làm việc này.

tôi đã thêm đoạn mã sau vào tập tin lớp học của tôi:

log4net.GlobalContext.Properties["hostname"] = Environment.MachineName; 

Và sau đó trong tập tin cấu hình tôi có thể tham khảo hostname và nó sẽ xuất hiện

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{hostname}] - %message%newline" /> 
</layout> 

Hope this helps.