2017-10-05 8 views
1

Habituellement, j'efface les fichiers journaux lorsque je suis en mode développement et j'ai besoin d'un nouveau départ pour me concentrer uniquement sur les choses que je dois tester.Logback arrête la consignation après avoir effacé le fichier journal

Si j'efface un fichier journal sous Linux (je n'ai pas testé Windows), le logback s'arrête pour écrire dans ce fichier Peut-être que c'est quelque chose à propos des gestionnaires ouverts et des descripteurs de fichiers sous linux.

Comment puis-je récupérer la situation sans redémarrer l'application? Est-il possibile d'avoir un appender qui peut automatiquement récupérer cette situation?

+0

Qu'est-ce que - spécifiquement - "effacer un fichier" signifie? Cela signifie-t-il supprimer certaines données d'un fichier? Cela signifie-t-il supprimer un fichier? – glytching

+0

Vous devez tronquer le fichier sans le supprimer. Bons exemples (tronquer, noclobber) ici: https://stackoverflow.com/questions/2423281/how-to-empty-truncate-a-file-on-linux-that-already-exists-and-is-protected-i – riskop

Répondre

0

Bien que votre application est en cours d'exécution (et Logback dans votre application a une poignée ouverte au fichier journal) ...

  • Vous ne pourrez pas supprimer le fichier sous Windows
  • Vous allez être en mesure de supprimer le fichier sur Linux mais, en ce qui concerne Logback, le fichier existe toujours jusqu'à ce que Logback ferme ce handle de fichier ouvert. Donc, Logback ne saura pas que le fichier a été supprimé mais puisque le fichier a été supprimé Logback ne peut rien écrire sur le disque et cette situation reste jusqu'à ce que Logback soit réinitialisé (et que votre fichier FileAppender recrée le fichier). Généralement, cela sera fait au démarrage de l'application.

Il existe un open issue contre Logback demandant une modification du comportement de Logback dans cette situation. Si votre but ici est d'avoir une sortie de journal qui se concentre sur l'activité récente seulement, vous pouvez définir un appender avec une taille minimale et sans historique pour conserver (par exemple) les 1 Mo de données, ceci peut aider à mettre en évidence derniers événements seulement.

Sinon, vous devrez:

  • Votez pour this issue
  • Utilisez grep/awk pour trouver les aspects pertinents de votre fichier journal (vous pouvez facilement grep sur horodatages), même si elles sont en un fichier journal qui contient les dernières heures d'événements de journal
  • Facilitez le redémarrage de votre application dans ce scénario en écrivant un script simple qui fait quelque chose comme: (1) arrêter l'application; (2) supprimer le fichier journal; (3) démarrer l'application