NLog performance
Ce qui devrait l'attendre surcharge être pour la journalisation?
J'ai essayé cet exemple
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()));
}
Avec MAXTEST valeurs de 100,500,1000, 5000
Résultats dans MAXTEST,noLogging, l'exploitation forestière
100, 25ms, 186ms
500, 33ms, 812ms
1000, 33ms, 1554ms
5000, 33ms, 7654ms
Accordé à l'un n'aurait sans doute jamais les journaux ce montant excessif, mais il présente l'impact sur les performances on pourrait s'attendre?
J'ai aussi essayé d'utiliser le asyncwrapper dans la config
<target name="asyncFile" xsi:type="AsyncWrapper">
<target name="file" xsi:type="File" fileName="${basedir}/log.txt" />
</target>
- Quel est votre enregistreur de faire?
- Wiki: github.com/NLog/NLog/wiki/Performance#file-logging-performance
Vous devez vous connecter pour publier un commentaire.
Vous devez seulement ajouter de la
async
attribut à votretargets
élément:au lieu de
Je pense que je n'ai pas bien loin dans la documentation 😉
Garder à l'esprit que l'utilisation asynchrone de journalisation peut causer certains messages à être jetés. C'est de par leur conception.
ref: https://github.com/nlog/NLog/wiki/AsyncWrapper-target#async-attribute-and-asyncwrapper
Attribut Async et AsyncWrapper
Ne pas combiner l'attribut Async et AsyncWrapper. Cela ne fera que ralentir le traitement et se comportent mal.
L'attribut Async va rejeter par défaut
L'attribut async est un raccourci pour:
xsi:type="AsyncWrapper overflowAction="Discard" queueLimit="10000" batchSize="100" timeToSleepBetweenBatches="50"
<targets async="true">
lieu, par exemple, de<target name="asyncFile" xsi:type="AsyncWrapper">
vous n'aurez plus l'asyncFile
cible. J'ai édité votre réponse à préciser que jusqu'à.Pour ceux qui ont besoin de perdre cette surcharge et est la configuration par code, il ne semble pas que vous pouvez définir toutes les cibles asynchrone par défaut, vous devez le définir par-cible:
Méfiez-vous que par défaut, si vous en file d'attente trop d'éléments de l'historique, il va juste déposer des éléments - regarder
OverflowAction = AsyncTargetWrapperOverflowAction.Block
pour revenir au comportement synchrone.AsyncTargetWrapperOverflowAction.Block
si vous sauvegardez l'enregistrement, alors il est probable que votre système est peut-être déjà souligné. Forcer l'enregistrement de bloc va encore nuire à votre performance. C'est peut-être mieux de laisser tomber les messages du journal de l'arrêt du traitement des demandes.targets
section, j'ai marquéasync
commetrue
. Dois-je encore besoin d'écrire du code pour mon web service pour faire de la journalisation async ou cadre prend soin d'elle?