Comment écrire dans le journal du système d'exploitation en Java?


Mac OS a une application appelée Console, qui contient des messages enregistrés, des erreurs et des défauts. Je crois que l'équivalent Windows est l'observateur d'événements. J'imagine qu'il y en a un aussi sur Linux, mais je ne sais rien à ce sujet ni où il se trouve.

Est-il possible d'obtenir un message de la sortie Java vers un journal système comme celui-ci? J'écris une application basée sur une interface graphique, donc il n'y a rien qui s'exécute à partir de la ligne de commande. La norme System.out ou System.err ne sera probablement pas très utile dans ce cas, sauf si je suis en manque de quelque chose.

J'ai écrit un service de journalisation simple pour mon application qui écrit dans un fichier journal dédié, mais je veux avoir une sorte de sécurité intégrée au cas où une erreur d'E/S se produirait lors de la tentative d'écriture dans ce fichier.

Je sais que l'E affichera la sortie via System.out et System.err très bien, mais c'est pour si l'utilisateur final rencontre un problème comme celui-ci.

Par exemple: J'ai écrit des "modules de langage sans code" pour l'application TextWrangler sur Mac. Ces modules sont lus par TW au démarrage de l'application, et s'il y a une erreur lors de leur traitement, les erreurs sont enregistrées et peuvent être visualisées dans l'application Console Mac.

Author: David Mordigal, 2017-04-02

2 answers

Sous Linux, il est appelé syslog. L'une des façons de réaliser la journalisation sur console sur Mac sera d'utiliser log4j 'org. apache.log4j.net. SyslogAppender'.

Je pense que ce lien devrait vous donner un coup de pouce dans cette direction.

 1
Author: Learner, 2017-04-02 04:51:18

Vous pouvez rediriger le système.dans un fichier journal, et l'application Console de Mac est la visionneuse par défaut pour les fichiers se terminant par ".journal".

Une façon de le faire est généralement avec un script shell qui appellerait votre programme Java. Dans cet exemple Java 7, la sortie de l'appel de la classe principale MyClass est redirigée vers mylogfile.journal. Tout ce qui est écrit avec le système.out sera dans mylogfile.journal.

#!/bin/bash

for a in /path/to/my/jars/*
do 
CLASSPATH=$CLASSPATH:$a
done

java -Xms128M -Xmx128M -XX:MaxPermSize=128M -cp ${CLASSPATH} com.example.package.MyClass >> mylogfile.log
 1
Author: Joseph Milane, 2017-04-02 04:14:57