Asynchrone De Journalisation
Droit maintenant, dans mon application,à certains moments, nous sommes la journalisation du lourd dans les fichiers journaux.
À la base seulement pour l'enregistrement, nous créons JSON des données disponibles et de l'enregistrement dans les fichiers Journaux.C'est l'exigence de l'entreprise pour enregistrer les données au format JSON .
Maintenant la création de JSON à partir des données disponibles, puis l'enregistrement du dossier prend beaucoup de temps et d'impacts sur l'original de la demande de temps de retour.
Maintenant, l'idée est d'améliorer la sitation .
L'une des choses que nous avons discuté est de créer un pool de threads à l'aide de
Executors.newSingleThreadExecutor()
dans notre code, puis en soumettant la tâche qui effectue la conversion de données en JSON et postérieure de l'exploitation forestière.
Est une bonne approche pour ce faire ?Comme nous sommes à la gestion du pool de thread lui-même ,est-ce que ça va créer des problèmes?
Je vous serais reconnaissant si quelqu'un peut partager les meilleures solutions.
D'une certaine manière pour utiliser Log4j pour cela .J'ai essayé d'utiliser AsyncAppender mais il n'a pas atteindre le résultat souhaité.
Nous sommes à l'aide d'EJB 3,Jboss 5.0,Log4j,java6.
OriginalL'auteur Rips | 2013-06-10
Vous devez vous connecter pour publier un commentaire.
Je crois que vous êtes sur la bonne voie en termes d'utilisation d'un thread séparé de la piscine pour la journalisation. Dans beaucoup de produits que vous pourrez voir le asynchrones fonctionnalité de journalisation. Les journaux sont accumulés et ont poussé dans des fichiers journaux à l'aide d'un thread séparé de la demande thread. En particulier dans les environnements de production, où sont les millions de requêtes entrantes et votre temps de réponse doit être de moins de quelques secondes. Vous ne pouvez pas se permettre autre chose, comme l'exploitation forestière, à ralentir le système. Donc, l'approche utilisée consiste à ajouter journaux dans une mémoire tampon et de la pousser de manière asynchrone en assez gros morceaux de taille.
Un mot de prudence lors de l'utilisation du pool de threads pour l'enregistrement
Comme plusieurs threads de travail sur le fichier journal(s) et une mémoire tampon de journal, vous devez être prudent au sujet de l'exploitation forestière. Vous devez ajouter journaux dans une FIFO une sorte de mémoire tampon pour être sûr que les journaux sont imprimés dans le journal les fichiers triés par heure. Assurez-vous également que l'accès au fichier est synchronisé et vous ne courez pas dans la situation où le fichier journal est tout à l'envers ou foiré.
OriginalL'auteur Juned Ahsan
Ont un coup d'oeil à Logback,AsyncAppender déjà fournir des threadpool, file d'attente, etc et est facilement configurable, c'est presque faire la même chose que vous faites, mais vous permet d'économiser de ré-inventer la roue.
Si vous avez d'autres tâches aussi(comme la conversion de données), puis la solution est également ok. Concernant log4j vs logback, log4j développement est arrêté et logback est active. Pour plus de détails sur log4j vs logback jetez un oeil à cette lien
OriginalL'auteur Alankar Srivastava
Est à l'aide de MongoDB pour la journalisation pris en compte?
ou vers le bas. MongoDB offre la possibilité
pour déclencher une insertion dans un journal collection et de ne pas attendre pour un code de réponse. (Si l'on
veut une réponse, on appelle getLastError() — nous ignorer qu'ici).
nous préallouer de l'espace pour les journaux, et une fois qu'il est plein, le journal des enveloppements
et réutilise l'espace spécifié. Pas de risque de remplir un disque avec
excessive les informations du journal, et pas besoin d'écrire des journaux d'archivage /
la suppression des scripts.
général, assez rapide pour ce type de problèmes. Deuxièmement, lors de l'utilisation d'un
plafonné collecte, de l'ordre d'insertion est automatiquement conservée: nous
n'avez pas besoin de créer un index sur l'horodatage. Ce qui rend les choses encore
plus rapide, et il est important étant donné que l'enregistrement de cas d'utilisation est très
haut nombre d'écritures par rapport à la lecture (à l'opposé de la plupart de la base de données
des problèmes).
champ chaque fois que nous voulons.
OriginalL'auteur rajesh
Il est également log4j 2: http://logging.apache.org/log4j/2.x/manual/async.html de lire cet article au sujet de pourquoi il est si rapide: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html#.UzwywI9Bow4
OriginalL'auteur Karussell
Vous pouvez également essayer CoralLog de manière asynchrone des données de journal à l'aide de la perturbateur modèle. De cette façon, vous passer un minimum de temps dans l'enregistreur de fil et tout le travail dur est passé au fil de faire le fichier I/O. Il fournit également les Fichiers Mappés en Mémoire pour accélérer le thread consommateur et de réduire la file d'attente de conflit.
Avertissement: je suis l'un des développeurs de CoralLog
OriginalL'auteur rdalmeida