2010-09-08 22 views

Respuesta

1

No fue una respuesta, pero hoy he preguntado question sobre el registro y WCF y una de las cosas que quería saber era sobre Service Trace Viewer. Todos los ejemplos que he visto describen los archivos XML consumidos por Service Trace Viewer generados a través de System.Diagnostics TraceSources y System.Diagnostics XmlFileListener. De todos modos, si recibo alguna respuesta en mi post, puede que les resulte útil.

+0

Creo que te refieres a System.Diagnostics.XmlWriterTraceListener. – bitbonk

+1

Tiene razón. Escribí eso sin verificar el nombre exacto del oyente. De todos modos, todavía estoy interesado en cómo obtener salida (si es posible) de log4net, NLog, etc. que es compatible con SvcTraceViewer.exe. – wageoghe

2

Si quisiera hacer esto, escribiría mi diseño personalizado. No (todavía) miré los detalles, pero escribiría una clase que deriva de XmlLayoutBase. Necesito más tiempo para ver los detalles ...

También podría escribir su propio appender, pero creo que en este caso tiene más sentido escribir una clase de diseño.

Editar: Tal vez escribir su propio appender es una buena idea. En ese caso, podría usar la clase System.ServiceModel.Diagnostics.DiagnosticTrace. Aún no estoy seguro si ese es el camino a seguir. No tengo mucho tiempo en este momento, pero investigaré esto.

+0

Creo que tomará una cantidad de tiempo considerable para imitar por completo el formato con todas las opciones de XmlWriterTraceListener. – bitbonk

+0

Eso es lo que también temo, de ahí mi nueva propuesta. –

+0

A qué clase System.ServiceModel.Diagnostics.DiagnosticTrace se refiere. En el GAC solo encuentro uno que es ensamblado interno y no se puede usar. – bitbonk

0

He aquí una idea:

Se podría escribir un log4net encargo Appender de y tienen que escribir mensajes (indirectamente) a la XmlWriterTraceListener. Dentro del método Agregar, simplemente envíe el mensaje a System.Diagnostics.

Aquí hay un example de un Appender personalizado.

En el ejemplo, se anula Append. Se pasa una clase/estructura LoggingEvent. Para sus propósitos (para obtener la salida log4net enrutada a un formato de salida que SvcTraceViewer pueda leer), puede escribir su salida a System.Diagnostics (configurándola primero para iniciar sesión en el XmlWriterTraceListener). Puede escribir utilizando métodos Trace.Write *, métodos Trace.Trace * o TraceSources.

Para TraceSources, podría considerar que el nombre de TraceSource es el mismo que el nombre del registrador (que está disponible en la clase/estructura LoggingEvent). Por lo tanto, podría configurar un TraceSource en su archivo app.config para cada nombre de log4net logger que quiera ingresar al archivo xml. Su lógica de Anexar podría verse más o menos así:

protected override void Append(LoggingEvent le) 
{ 
    TraceSource ts = new TraceSource(le.LoggerName); // Not sure of logger name field in LoggingEvent 
    ts.TraceEvent(LogLevelToTraceEventType(le.Level), 0, le.FormattedMessage); 
} 

Esto podría darle lo que desea. Tenga en cuenta que en realidad no he hecho esto, por lo que no puedo decir si es una buena idea o no, pero ciertamente parece que funcionaría.

Lo siento por ser breve, pero estoy tratando de terminar esto antes de tener que irme.

+0

Escribir un appender personalizado (con el único propósito de formatear) tiene un inconveniente: no puedo usar todos los otros Anexos (RollingFileAppender, FileAppender, ...) o tendría que subclasificarlos a todos. – bitbonk

+0

FWIW, puede encontrar el código para el XmlWriterTraceListener aquí: http://www.koders.com/csharp/fid7ECC273D0A665AFFDB9276AC64289085CD1E2A8E.aspx?s=DateTime No estoy seguro de cuán actual es (es decir .NET 1.1, 2.0, 3.0 , etc.), pero parece mostrar cómo diseñar el xml en un formato que puede ser consumido por SvcTraceViewer. Tal vez esto podría usarse para desarrollar un XmlLayout. Realmente no estoy muy familiarizado con la escritura de diseños de log4net, por lo que no puedo decir si esta es una buena idea o no. – wageoghe

+0

Un appender personalizado no es posible en mi humilde opinión porque no puedo escribir a otros appenders utilizando ese mismo formato. Me gustaría escribir en RollingFileAppender usando el formato. – bitbonk

Cuestiones relacionadas