Quelle est la meilleure pratique pour la mise en forme de logs?
Je suis en train d'écrire un morceau de pot de miel logiciel qui vous ont exploitation extensive des interactions avec elle, j'ai l'intention de journal en clair .log
fichiers.
J'ai deux questions, de quelqu'un qui n'est pas trop familier avec la façon dont les serveurs journal.
-
Tout d'abord, comment dois-je rompre mon journal de fichiers, je suis en supposant qu'après l'exécution de la présente pendant un mois, je ne veux pas un gros
.log
fichier, puis-je faire par jour, mois, année? Est-il une norme pour elle? -
Le format de chaque ligne, puis-je avoir un standard délimiteur qui que ce soit, *, -, +, quoi que ce soit? Est-il un standard de n'importe où (à mes recherches sur google n'a pas apporté beaucoup)?
Vous devez vous connecter pour publier un commentaire.
J'aime ce format pour les fichiers journaux:
C'est à partir de python module de journalisation.
D'habitude, j'ai un fichier par jour, un dossier pour chaque mois, un dossier pour chaque année. Vous obtiendrez d'énormes fichiers journaux que vous ne pouvez pas éditer correctement sinon.
Il n'y a pas de norme pour un tel enregistrement. Et laminage, de la mise en page des fichiers, tout dépend de ce que vous avez besoin. En général, j'ai affronté 3 scénarios principaux:
log4anything
paquets.YYYYMMDD
. Si vous n'avez pas de scène de vos journaux de considérer la disposition des répertoires YYYY\MM\AAAAMMJJ comme indiqué dans d'autres réponses.logfile_yyyymmdd_ccc.log
oùccc
est en nombre croissant. Ajout du temps de nom de fichier est également une bonne idée (par exemple. facilement juger de la façon dont de nombreux journaux par minute de la production)UNIX
des outils de texte.Cette coutume ressemblait à celui-ci
Il existe également des tas de bonnes pratiques en matière d'exploitation forestière:
Excel
. Si elle prend plus de 30 secondes, cela signifie que votre enregistrement est mauvais. Cela comprend:Unix
outils de texte et avecExcel
.De briser vos fichiers journaux, vous pouvez utiliser une application externe, comme logrotate et laisser prendre soins de la sale besogne.
Comme pour le format de chaque ligne, il n'y a pas de standard, de sorte que vous devrait utiliser ce qui fonctionne le mieux pour vous. Si vous allez à analyser automatiquement le fichier journal plus tard, alors vous voudrez peut-être garder à l'esprit que vous le format de la sortie du journal.
Je vous recommande d'utiliser un bien connu bibliothèque de journalisation. La plupart de journalisation des bibliothèques de support de roulement pour vous. Log4Net (.net) /Log4J (java), il est particulièrement bonne bibliothèque de journalisation à utiliser, et il a beaucoup d'options que vous pourriez trouver utiles. Utilisez tout ce survol de l'intervalle qui fonctionne le mieux pour vous. Pour un pot de miel de l'application, je pense que vous trouverez à l'heure ou à la rotation quotidienne de travail meilleures. Vous pouvez également utiliser une limite fixe, à l'instar de 256 mo, pour vous assurer que votre journal d'efforts n'est pas de dépassement de l'espace disque disponible. Log4Net/Log4J prend en charge cette ainsi.
Log4J @ Apache.Org
Log4Net @ Apache.Org
Le format de vos fichiers de log doit être configurée en fonction de vos besoins. Il est hautement souhaitable d'utiliser un délimiteur qui est peu probable à apparaître dans votre journal d'entrée. Pour votre application, cela peut ne pas être possible. Dans des circonstances normales, certaines parties de l'utilisation des espaces (NCSA journaux), certaines parties de l'utilisation des virgules (pour faire des fichiers CSV), certaines parties d'utiliser les onglets (pour faire des fichiers délimités par des tabulations). Celles-ci ont chacune leurs propres avantages et inconvénients.
À mon avis, le plus important est:
Une suggestion:
Être pour un pot de miel système (et à moins que les méchants sont vraiment à battre de l'application/du site), vous pouvez envisager de prendre le temps de se connecter à une base de données au lieu.
Cela permettra de faire de l'analyse et de l'utilisation des journaux plus facile, et en temps réel (c'est à dire que vous n'avez pas besoin de passer par le processus ETL avant d'analyse et de navigation les journaux.
Cela dit être dans une table DB(s) ou fichier(s), cela n'empêche toutefois pas la nécessité de définir un format. Provisoirement, vous pouvez avoir un "polymorphes" format, avec quelques attributs communs (ID, adresse IP, l'Horodatage, le Cookie/ID, le "niveau" [de l'importance et de l'urgence]), suivie par un court-code mnémonique de la définition d'un type d'événement particulier (par exemple "LIA" = tentative de connexion, "GURL" = deviné url, "SQLI" tentative d'Injection SQL, etc...), suivie par quelques champs numériques, et quelques champs de type chaîne qui sémantique variable selon le mnémonique. Pour résumer:
Maintenant... indépendamment de ce que ça va pour un plat de fichier ou de base de données SQL (et peut-être surtout si vous allez à DB), vous pourrait/devrait utiliser une bibliothèque de journalisation. Peut-être log4j comme suggéré dans d'autres réponses (même si je ne suis pas sûr si c'facilement a des liaisons en Python, et de toute façon, le Python standard du module de journalisation est +/- la même chose...) ou même de la Python à la bibliothèque standard du module de journalisation peut probablement être adaptés à vos besoins.