logger implement example c# logging nlog

c# - implement - nlog file target



Rendimiento NLog (2)

Para cualquiera que necesite perder esta sobrecarga y se configure por código, no parece que pueda establecer todos los objetivos de manera asíncrona por defecto; debe definirlo por objetivo:

// Set up asynchronous database logging assuming dbTarget is your existing target AsyncTargetWrapper asyncWrapper = new AsyncTargetWrapper(dbTarget); config.AddTarget("async", asyncWrapper); // Define rules LoggingRule rule1 = new LoggingRule("*", LogLevel.Trace, asyncWrapper); config.LoggingRules.Add(rule1);

Tenga cuidado de que, de forma predeterminada, si pone en cola demasiados elementos de registro, simplemente suelte los elementos: mire OverflowAction = AsyncTargetWrapperOverflowAction.Block para volver al comportamiento síncrono.

¿Cuál debería ser la sobrecarga esperada para el registro? He probado este ejemplo

private class Person { private static Logger logger = LogManager.GetCurrentClassLogger(); public string Name { get; private set; } public Person(string name) { Name = name; logger.Info("New person created with name {0}", name); } } List<Person> people = new List<Person>(); for (int i = 0; i < MAXTEST; i++) { people.Add(new Person(i.ToString())); }

Con valores MAXTEST de 100,500,1000, 5000

Resultados en MAXTEST, no Logging, Logging

100, 25ms, 186ms 500, 33ms, 812ms 1000, 33ms, 1554ms 5000, 33ms, 7654ms

De acuerdo, uno probablemente nunca registraría esta cantidad excesiva, ¿pero este es el rendimiento esperado que uno esperaría?

También he intentado usar el asyncwrapper en la configuración

<target name="asyncFile" xsi:type="AsyncWrapper"> <target name="file" xsi:type="File" fileName="${basedir}/log.txt" /> </target>


Solo necesita agregar el atributo async a su elemento de targets :

<targets async="true"> <target name="asyncFile" xsi:type="AsyncWrapper"> <target name="file" xsi:type="File" fileName="${basedir}/log.txt" /> </target>

en lugar de

<targets> <target name="asyncFile" xsi:type="AsyncWrapper"> <target name="file" xsi:type="File" fileName="${basedir}/log.txt" /> </target>

Supongo que no llegué tan lejos en la documentación ;-)

El contenedor de destino asincrónico permite que el código del registrador se ejecute más rápidamente, al poner en cola mensajes y procesarlos en un hilo separado. Debe ajustar los objetivos que pasan una cantidad de tiempo no trivial en su método Write () con el objetivo asincrónico para acelerar el registro. Como el registro asincrónico es un escenario bastante común, NLog admite una notación abreviada para envolver todos los objetivos con AsyncWrapper. Simplemente agregue async = "true" al elemento en el archivo de configuración. ... tus objetivos van aquí ...

Tenga en cuenta que el uso del registro asincrónico puede ocasionar que ciertos mensajes sean descartados. Esto es por diseño .