2010-06-24 19 views

Respuesta

6

Usted puede intentar usar una costumbre Log4J appender, que tiene ID del tema como parámetro y filtra los mensajes en base a lo que se llama hilo. Créelo sobre la marcha, adjúntelo al registrador.

hay varios problemas con este enfoque, aunque:

  1. Demasiados appenders frenaría la tala
  2. appservers por lo general tienen un grupo de subprocesos. Esto significa que el mismo hilo a lo largo del tiempo tomaría parte en la ejecución de solicitudes totalmente independientes, que terminarán en el mismo archivo de registro.

Le sugiero que considere un enfoque más simple: log thread id en el mismo archivo de registro. Es rápido y simple, log4j tiene un indicador de% para hacerlo. Más tarde puede grep/dividir el archivo de registro por id. De subproceso si es necesario.

actualización:

En realidad, usted puede tener un único appender costumbre, que se abrirá archivos de registro en la demanda cuando un nuevo hilo registra un registro (el appender se ejecuta dentro de ese contexto hilo, simplemente llame a rosca. currentThread(). getName()). Pero tendrá que volver a implementar todas las tareas habituales del archivo de registro (rotación) o delegarlo en el appender estándar para cada archivo.

+0

Ver http://stackoverflow.com/questions/8226615/how-to-use-log4j-in-multithread-using-java – Benj

4

que tienen una aplicación multiproceso que identifica a cada hilo en el archivo de registro (dunno acerca de los archivos mutliple, en fila india me muestra concurency), la identificación de la rosca se realiza automáticamente por el marco de registro, es Log4J

Edición: Nada hay que añadir en el código, que acaba de configurar el appender en el registrador de incluir [% hilo] que identificará el hilo desde el que está registrando el mensaje actual, esto es ejemplo es de log4net:

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
</layout> 

Aquí está una lista de otros común Java logging frameworks

+0

por supuesto que todos conocemos log4j, pero si usted dice que es posible, puede mostrarnos la implementación simple para hacerlo usando log4j. – mabuzer

0

En algunos casos, conocer el identificador de subprocesos es mucho menos importante que conocer el contexto de ejecución. Esto sería especialmente cierto con muchos hilos y aplicaciones más grandes. ¿Qué haces cuando la identificación del hilo cambia, pero el contexto de ejecución real es realmente el mismo (como alguien mencionado con los grupos de hilos) ?. Prefiero usar MDC (mapped diagnostic context) para rastrear el contexto de ejecución en los registros. Es mejor porque controlas el contexto. Al final, puede configurar el diseño de los registros para incluir MDC y luego filtrar fácilmente lo que sea relevante. Consulte this tool, hace un montón de cosas con MDC.

Cuestiones relacionadas