visual studio instalar ejemplo .net visual-studio visual-studio-2010 log4net trace

.net - instalar - ¿Cómo detengo la ventana de salida de Visual Studio que muestra el nombre del registrador de la salida de log4net?



log4net visual studio 2017 (6)

Estoy usando log4net DebugAppender (o TraceAppender). He configurado el appender así:

<appender name="DebugAppender" type="log4net.Appender.DebugAppender"> <immediateFlush value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level %message%newline" /> </layout> </appender>

Los registradores en el código se declaran de la manera habitual por clase:

private static readonly ILog Log = LogManager.GetLogger(typeof(TradingApiRouteCollectionExtensions));

La salida en las ventanas de salida se ve así:

Acme.Common.Configuration.TradingApiRouteCollectionExtensions: DEBUG Registro de la condición de la sesión para el servicio Acme.Session.SessionService Acme.Common. Sesión DEBUG /

Observe cómo cada línea comienza con el nombre del tipo de registrador. Quiero suprimir esto ya que no lo pedí en la configuración y no lo quiero. No puedo ver ninguna forma obvia de hacer esto. ¿Es posible?


Alternativamente, puede comenzar su patrón de conversión de diseño con %newline . Desde mi configuración:

<appender name="DebuggerAppender" type="log4net.Appender.DebugAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%file (%line): %level: %message%newline"/> </layout> </appender>

Pros : es más rápido que crear tu propio appender

Contras : te muestra iniciar sesión en 2 líneas.

Observe cómo el %file (%line) al principio de la línea es un formato interpretado por Visual Studio. Le permite hacer clic en el mensaje de registro en la ventana de resultados y dirigirse directamente al código que lo generó.


Con el log4net moderno es posible hacer esto:

<appender name="DebugAppender" type="log4net.Appender.DebugAppender" > <!-- Add the <category> tag as below, this will remove %logger prefix in the output --> <category type="log4net.Layout.PatternLayout"> <conversionPattern value="" /> </category> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="...whatever normal pattern you need there..." /> </layout> </appender>

La propiedad "categoría" de DebugAppender tiene un valor predeterminado de new PatternLayout("%logger") , y log4net usa el resultado formateado de ésta como el parámetro de category de Debug.Write(string, string) . No estoy seguro de por qué lo hicieron, pero de todos modos la configuración anterior le permite a log4net saber que la categoría no es necesaria, y comienza a usar la Debug.Write(string) , es decir, la que no tiene la categoría.


Mi edición de la respuesta se rechazó, así que proporcioné información adicional útil por separado. Aquí es cómo se vería una implementación completa:

public class MyDebugAppender : log4net.Appender.DebugAppender { protected override void Append(LoggingEvent loggingEvent) { System.Diagnostics.Debug.Write(RenderLoggingEvent(loggingEvent)); if (ImmediateFlush) { System.Diagnostics.Debug.Flush(); } } }

m_immediateFlush es inaccesible en la clase derivada, por lo que necesita usar la propiedad ImmediateFlush.

Además, tenga en cuenta que si utiliza un archivo log.config, deberá especificar que su Appender se proporciona en un nuevo ensamblaje. (Cortesía de esta respuesta SO ).

<appender name="AppenderRef" type="MyNamespace.MyDebugAppender, MyAppenderAssembly">


Necesitas crear tu propio appender. El que está utilizando hace lo siguiente:

System.Diagnostics.Debug.Write(RenderLoggingEvent(loggingEvent), loggingEvent.LoggerName); if (!this.m_immediateFlush) return; System.Diagnostics.Debug.Flush();

Por lo tanto, siempre terminará con el nombre de la clase (registrador) en la ventana de resultados. Puede derivar del agregador de depuración log4net y anular el método Append .


Si lees el código fuente de TraceAppender , encontrarás que en realidad el nombre del registrador se escribe como el nombre de "categoría" por defecto de la traza. Por lo tanto, si ya estableció este valor, el nombre del registrador no se mostrará en la salida.

Así que con la siguiente configuración:

<appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <category value="" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %level - %message%newline%exception" /> </layout> </appender>

La salida será:

: 2017-02-27 22:53:26,335 [6] INFO - Task Ended

Pero puedes encontrar que cada línea comienza con ":", lo cual es feo. Así que mi configuración para la categoría es:

... <category value="LOG" /> ...

Y la salida es:

LOG: 2017-02-27 22:53:26,335 [6] INFO - Task Ended

NOTA: DebugAppender no proporciona la manera de sobrescribir la categoría. Solo funciona TraceAppender.