2013-03-19 3 views
11

Io sono di tipo bloccato con le mie ricerche riguardanti EnterpriseLibrary.Logging. Ho un ascoltatore e formattatore impostato in questo modo:Come accedere in UTF-8 utilizzando 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" /> 

Io uso questo in più progetti e si sta lavorando bene.

Eccetto per una cosa, voglio EnterpriseLibrary di creare il mio file di log con UTF-8-codifica (ho i file ANSI per impostazione predefinita), ma purtroppo non ho idea di come farlo.

Ho i caratteri speciali nelle stringhe che voglio essere in grado di accedere al mio file (come dieresi); Vedo che il logging funziona bene, quando converto il mio file in UTF-8 e lo lascio utilizzare ulteriormente, ma voglio davvero averlo creato in questo modo.

si può fare nella configurazione XML o da qualche altra parte?

Grazie per qualsiasi aiuto in anticipo!

risposta

4

Fuori dalla scatola, non credo che il blocco applicativo EnterpriseLibrary.Logging supporti l'output su utf-8. Sembra che venga trasmesso solo all'ANSI predefinito. Detto questo, si potrebbe sempre scrivere il proprio TraceListener che verrebbe inviato a utf-8.

codice non testato. L'ho scritto veloce e sporco. Guarda il percorso del file codificato:

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

Sì, lo temo anch'io, ma non ho ancora perso la speranza;) Forse hai ottenuto un buon esempio per questo? – DrCopyPaste

+0

Versione di EnterpriseLibrary? – TimWagaman

+0

Hai ottenuto la versione 5 qui – DrCopyPaste