2011-06-15 4 views
0

J'ai créé un petit programme qui enregistre des données de texte dans un fichier sur une action. J'accède au système distant où le programme est déployé par Putty. J'ai exécuté le programme en utilisant nohup afin qu'il continue à fonctionner même si je ferme mon shell. Jusqu'à ce que je suis connecté dans le shell, il continue à enregistrer les données. Cependant, dès que je quitte mon shell, il arrête d'écrire dans le fichier journal. Mon programme continue à s'exécuter simplement qu'il n'écrit pas dans le fichier journal. J'utilise Java 1.6 + slf4j + log4j pour la journalisation. L'OS est Ubuntu.Problème Java Logging & Unix Nohup

J'apprécierais de l'aide.

EDIT: mes log4j.properties

log4j.rootLogger=DEBUG 

log4j.appender.AdminFileAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.AdminFileAppender.File=pdmLogs.log 
log4j.appender.AdminFileAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.AdminFileAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} -- %p %t %c - %m%n 

log4j.appender.ReportFileAppender=org.apache.log4j.ConsoleAppender 
log4j.appender.ReportFileAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.ReportFileAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} -- %p %t %c - %m%n 

log4j.logger.com.xxx.xxx.yyy=ReportFileAppender,AdminFileAppender 
log4j.logger.com.xxx.xxx.zzz=ReportFileAppender,AdminFileAppender 

La commande que je suis en cours d'exécution est:

nohup java -cp jarfile.jar com.xxx.xxx.yyy.Main & 
+0

Avez-vous exécuté comme 'nohup java -cp ... myMainClass &'? (Notez le '&') – RonK

+0

oui je l'ai couru en arrière-plan – Abhishek

+0

Est-ce que votre log4j est configuré avec un 'console appender' aussi bien? Si oui - avez-vous essayé de l'éteindre et de ne laisser que le «fichier appender»? – RonK

Répondre

1

Essayez de changer votre configuration:

log4j.rootLogger=DEBUG, AdminFileAppender 
... 
0

Comment exécuter le programme vous? Après l'exécution du programme, le voyez-vous parmi la liste des processus en cours en faisant ps -ef | grep <process-id> Juste pour être sûr, votre programme ne bloque à aucun moment en attente d'entrée? Vérifiez également la valeur de sortie de votre processus.

+0

oui je vois le programme en cours d'exécution. Il s'agit essentiellement d'un serveur TCP qui accepte les demandes des clients et enregistre les données qui lui sont envoyées par les clients. Donc, même en fermant le shell, je suis toujours capable de me connecter au serveur TCP et d'envoyer des données. – Abhishek