2011-01-07 4 views
13

J'ai actuellement la disposition de modèle ci-dessous dans log4j. Je veux ajouter l'identificateur de processus au fichier journal. Comment puis-je le faire?Comment ajouter l'ID de processus à un fichier journal LOG4J?

log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 

échantillon Collé message journal

2011-01-07 11:48:21,940 [main] INFO Testing1 
2011-01-07 11:48:21,942 [main] INFO Test.common.ApplicationProperties - Used log4j 

log4j.properties
"log4j.properties" [Read only] 26 lines, 884 characters 
log4j.rootCategory=DEBUG, stdout, A1 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Threshold=WARN 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p (%c) %m%n 


log4j.appender.A1=org.apache.log4j.RollingFileAppender 
log4j.appender.A1.Threshold=DEBUG 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n 
log4j.appender.A1.File=/homw/cus/logs/ccl.02.log 
log4j.appender.A1.MaxFileSize=5MB 
log4j.appender.A1.MaxBackupIndex=40 


log4j.category.test.common.DBConnectionPool=WARN 
log4j.category.test.common.DataBaseHandler=WARN 
log4j.category.test.cttg.tables=WARN 
log4j.category.test.middleware.tables=WARN 

log4j.logger.org.apache.axis=ERROR 
log4j.logger.org.apache.catalina=ERROR 
+1

double possible de [Comment se connecter id processus en utilisant log4cxx ou log4j] (http://stackoverflow.com/questions/4286089/ h ow-to-log-process-id-using-log4cxx-or-log4j) – skiphoppy

+0

Voulez-vous que l'ID du processus java soit imprimé ou que l'ID du thread actuel soit imprimé? – armstrhb

Répondre

2

Il n'y a pas moyen de le faire en utilisant des classes Java standard. En règle générale, l'identifiant du processus est ajouté au niveau du fichier et non au niveau du journal. Et here est un exemple de le faire.

+0

Je n'ai que le fichier log4j.properites. Je ne vois aucun fichier de configuration xml. – Arav

+0

Dans le lien que vous avez collé, il y a un fichier config xml – Arav

+0

Je ne vois aucun fichier xml config. Où puis-je faire le changement – Arav

10

Vous devez utiliser MDC pour le faire

Dans le fichier de configuration:

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p (%c) %m%n %X{PID} 

%X{PID} est utilisé pour correspondre à la valeur de contexte PID

Et puis, dans le code, avant l'enregistrement commence:

log4j 1.x

RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); 
String pid = rt.getName(); 
MDC.put("PID", pid); 

log4j 2.x

RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); 
String pid = rt.getName(); 
ThreadContext.put("PID", pid); 
+0

J'essaye d'exécuter votre code dans wso2 esb dans le médiateur de script comme ceci mais il donne une erreur. importPackage (Packages.java.net); importPackage (java.lang.management); importPackage (Packages.org.apache.log4j); try { \t RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean(); Chaîne pid = rt.getName(); MDC.put ("PID", pid); } } catch (e) {} –

+0

Quelle est l'erreur? – ToYonos

+0

WSo2 EsB ne me permet pas d'enregistrer la modification. il donne une exception d'administration proxy, si je supprime ce médiateur de script et change quelque chose d'autre, le service fonctionne bien. Je pense qu'il y a quelque chose qui ne va pas avec le code, peut-être que je n'inclus pas les bons paquets ou le "script" mediator prend "javascript" comme entrée et cela peut être interdit dans le script java. –

1

Avec le schéma suivant, montrant ThreadID et classe. Si vous voulez voir l'ID de processus, peut vérifier here

log4j.appender.SYSLOG.layout.conversionPattern=%-5p %d{ddMMyyyy HH:mm:ss.SSS} [%t:%c] %m%n 

J'ai réussi à le faire, mais j'ai plusieurs appenders, un pour chaque partie de l'application, comme ce qui suit:

log4j.rootCategory=ERROR, SYSLOG2 
log4j.logger.com.myself.logic=DEBUG, SYSLOG 
log4j.logger.com.myself.database=DEBUG, SYSLOG3 
log4j.logger.com.myself.other=DEBUG, SYSLOG 

Voici quelques exemples de journaux générés, pour vérifier si c'est ce que vous avez besoin:

INFO 20012015 11:56:17.318 [pool-1-thread-1:com.myself.logic.MonitoringTask] 10602: Validation of orders before UTC=2015-01-20T16:56:17 
INFO 20012015 11:56:34.200 [main:com.gmv.pazgs.mus.mpu.CLibWrapper] 10402: MPU Library folder: xxxxx 
INFO 20012015 11:56:34.209 [main:com.gmv.pazgs.mus.mpu.CLibWrapper] 10402: MPU Configuration folder: xxxxx 
INFO 20012015 11:56:34.773 [main:com.gmv.pazgs.mus.mpu.CLibWrapper] 10402: Calling InitLeap() 
INFO 20012015 11:56:34.786 [main:com.gmv.pazgs.mus.mpu.CLibWrapper] 10402: Calling InitFourier() 
INFO 20012015 11:57:10.151 [CRON_Thread:com.myself.other.DTOLDispatcher] 10202: Times to send: [11:00, 23:00] - current time = Tue Jan 20 11:57:10 UTC 2015 
INFO 20012015 11:58:10.165 [pool-1-thread-4:com.myself.logic.MonitoringTask] 10602: Executing Monitoring Task UTC=2015-01-20T11:58:10 
INFO 20012015 11:58:10.171 [pool-1-thread-5:com.myself.logic.OrderValidationTask] 10602: Executing OrderValidationTask UTC=2015-01-20T11:58:10 
INFO 20012015 11:58:10.291 [CRON_Thread:com.myself.other.DTOLDispatcher] 10202: Times to send: [11:00, 23:00] - current time = Tue Jan 20 11:58:10 UTC 2015 
INFO 20012015 11:58:10.684 [pool-1-thread-4:com.myself.logic.MonitoringTask] 10602: Expiration of orders before UTC=2015-01-20T11:58:10 
INFO 20012015 11:58:11.218 [pool-1-thread-4:com.myself.logic.MonitoringTask] 10602: checking orders for suppresed status before UTC=2015-01-20T11:58:11 
INFO 20012015 11:58:11.244 [pool-1-thread-4:com.myself.logic.MonitoringTask] 10602: Validation of orders before UTC=2015-01-20T16:58:11 
+0

Merci pour votre réponse, mais j'avais besoin de l'identifiant de processus, j'utilise déjà l'identifiant de thread. –

Questions connexes