2013-03-19 12 views
11

Tôi bị kẹt với các tìm kiếm liên quan đến EnterpriseLibrary.Logging. Tôi có một người biết lắng nghe và định dạng thiết lập như thế này:Cách đăng nhập UTF-8 bằng cách sử dụng EnterpriseLibrary.Logging

<add name="NormalLogListener" 
    type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging" 
    listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging" 
    fileName="logs/MVC22.log" 
    footer="" 
    formatter="ShortLogFormatter" 
    header="" 
    rollInterval="Day" 
    timeStampPattern="yyyy-MM-dd" 
    maxArchivedFiles="14" /> 

...

<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging" 
    template="{timestamp(local)} - {severity} - {category} - {message}" 
    name="ShortLogFormatter" /> 

tôi sử dụng này trong nhiều dự án và nó đang làm việc tốt.

Ngoại trừ một điều, tôi muốn EnterpriseLibrary tạo tệp nhật ký của mình với mã hóa UTF-8 (tôi nhận được tệp ANSI theo mặc định), nhưng tiếc là tôi không biết cách thực hiện điều đó.

Tôi có các ký tự đặc biệt trong chuỗi mà tôi muốn có thể đăng nhập vào tệp của mình (chẳng hạn như dấu phẩy); Tôi thấy việc ghi nhật ký hoạt động tốt, khi tôi chuyển đổi tệp của mình sang UTF-8 và để nó được sử dụng thêm, nhưng tôi thực sự muốn nó được tạo theo cách đó.

Điều này có thể được thực hiện trong cấu hình xml hoặc ở nơi khác không?

Cảm ơn bạn đã giúp đỡ trước!

Trả lời

4

Ngoài hộp, tôi không tin rằng khối ứng dụng EnterpriseLibrary.Logging hỗ trợ đầu ra thành utf-8. Dường như chỉ xuất ra ANSI mặc định. Điều đó đang được nói, bạn luôn có thể viết TraceListener của riêng bạn sẽ xuất ra utf-8.

Mã chưa được kiểm tra. Tôi đã viết nó nhanh chóng và bẩn thỉu. Xem đường dẫn tệp được mã hóa cứng:

using System; 
using System.Text; 
using System.Diagnostics; 
using Microsoft.Practices.EnterpriseLibrary.Logging; 
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration; 
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners; 
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; 

namespace YourNamespace 
{ 
    [ConfigurationElementType(typeof(CustomTraceListenerData))] 
    class UTF8Logging:CustomTraceListener 
    { 
     public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) 
     { 
      if (data is LogEntry && this.Formatter != null) 
      { 
       this.WriteLine(this.Formatter.Format(data as LogEntry)); 
      } 
      else 
      { 
       this.WriteLine(data.ToString()); 
      } 
     } 

     public override void Write(string message) 
     { 
      this.WriteLine(message); 
     } 

     public override void WriteLine(string message) 
     { 
      string fileName = @"C:\Your.log"; 
      using (StreamWriter sw = new StreamWriter(File.Exists(fileName) ? System.IO.File.Open(fileName, FileMode.Append) : System.IO.File.Create(fileName), Encoding.UTF8)) 
      { 
       Byte[] logMessage = new UTF8Encoding(true).GetBytes(message); 
       sw.Write(logMessage,0,logMessage.Length); 
      } 
     } 
    } 
} 
+0

Vâng, tôi cũng sợ điều đó, nhưng tôi vẫn chưa từ bỏ hy vọng;) Có lẽ bạn có một ví dụ hay về điều đó? – DrCopyPaste

+0

Phiên bản EnterpriseLibrary? – TimWagaman

+0

Có phiên bản 5 tại đây – DrCopyPaste