c# logging encoding enterprise-library-5

c# - Cómo iniciar sesión en UTF-8 usando EnterpriseLibrary.Logging



encoding enterprise-library-5 (1)

Fuera de la caja, no creo que el bloque de aplicación EnterpriseLibrary.Logging admita salida a utf-8. Parece que solo sale al ANSI predeterminado. Dicho esto, siempre puedes escribir tu propio TraceListener que salga a utf-8.

Código no probado. Lo escribí rápido y sucio. Mire la ruta del archivo codificado:

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); } } } }

Estoy algo atrapado con mis búsquedas relacionadas con EnterpriseLibrary.Logging. Tengo un oyente y formateador configurado de esta manera:

<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" />

Lo uso en múltiples proyectos y funciona bien.

Excepto por una cosa, quiero que EnterpriseLibrary cree mi archivo de registro con codificación UTF-8 (obtengo archivos ANSI por defecto), pero desafortunadamente no tengo ni idea de cómo hacerlo.

Tengo caracteres especiales en cadenas que deseo para poder iniciar sesión en mi archivo (como diéresis); Veo que el registro funciona bien, cuando convierto mi archivo a UTF-8 y lo uso más, pero realmente quiero que se cree de esa manera.

¿Se puede hacer esto en la configuración xml o en otro lugar?

Gracias por cualquier ayuda de antemano!