Bonjour à tous,

Je travaille sur une application web Java en utilisant logback comme gestionnaire de logging.

Pour expliquer un peu le contexte applicatif.
J'ai un objet métier référence auquel on doit rattacher un certain nombres de données. Pour ce faire, on a un thread qui est lancé et qui va effectuer différents traitements.
Logback intervient justement dans la gestion de log au niveau du thread, on va créer un fichier unique pour chaque traitement.
Ce log va être visible par l'utilisateur (par téléchargement) et peut être justement effacé par un utilisateur si il supprime l'objet métier référence.

Si jamais un nouvel utilisateur recréé cette même référence, il doit me recréer un fichier de log avec le même nom et me tracer le traitement associé.

Voici mon problème, mon appender dans SiftingAppender est bien créé lorsqu'aucun fichier du même nom n'a jamais été créé auparavant. Lors de la suppression de ma référence et donc mon log, lorsque je recrée la même référence, le SiftingAppender ne me recrée pas un appender pour écrire mon log.
En redémarrant le serveur, évidemment le log est en mesure de se recréer.

Voici la déclaration de mon siftingAppender :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
 
		<!-- in the absence of the class attribute, it is assumed that the desired 
			discriminator type is ch.qos.logback.classic.sift.MDCBasedDiscriminator -->
		<discriminator>
			<key>file</key>
			<defaultValue>unknown</defaultValue>
		</discriminator>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>DEBUG</level>
		</filter>
		<sift>
			<!--  <appender class="ch.qos.logback.core.FileAppender">-->
			 <appender name="myAppender" class="com.MyAppender">
				<file>${file}</file>
				<append>false</append>
				<!--  <prudent>true</prudent>-->
				<encoder>
					<pattern>%d [%thread][%X{rae}] %level %logger{35} - %msg%n</pattern>
				</encoder>
			</appender>
		</sift>
	</appender>
A la fin je lui indique le marker de libération du fichier pour qu'il soit supprimé par l'utilisateur si il le demande.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
// Relache la log du thread 10 sec après le marker environ
		LOG.info(ClassicConstants.FINALIZE_SESSION_MARKER, "Fin du traitement de la RAE " + reference.getNomRae());
 
		// remove datas from MDC
		MDC.remove("file");
Et voici un exemple de log, montrant bien pour la première création de référence, on a un appender qui est créé et pour la seconde rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
12:05:06,591 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [com.MyAppender]
12:05:06,592 |-WARN in ch.qos.logback.core.joran.action.AppenderAction - No appender name given for appender of type com.MyAppender].
12:05:06,595 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
12:05:06,596 |-INFO in com.MyAppender[null] - File property is set to [/123645666/123645666.log]
2016-02-12 12:05:06,590 27964 [pool-1-thread-1] INFO  c.i.jdd.utils.CreateOrUpdateTask - Début du traitement de la RAE 123645666
2016-02-12 12:05:07,289 28663 [pool-1-thread-1] INFO  c.i.j.e.impl.StoredProcedureDaoImpl - Appel de la procédure stockée : {? = call cci_releve(?)}
2016-02-12 12:06:30,290 111664 [pool-1-thread-1] DEBUG c.i.j.e.impl.StoredProcedureDaoImpl - ERR-FUNC01;RAE inconnue
2016-02-12 12:06:30,290 111664 [pool-1-thread-1] ERROR c.i.j.e.impl.StoredProcedureDaoImpl - Erreur fonctionnelle => ERR-FUNC01 / RAE inconnue
2016-02-12 12:06:30,341 111715 [pool-1-thread-1] WARN  c.i.jdd.utils.CreateOrUpdateTask - Pas de résultats pour cette procédure
2016-02-12 12:06:30,380 111754 [pool-1-thread-1] INFO  c.i.jdd.utils.CreateOrUpdateTask - Fin du traitement de la RAE 123645666
 
2016-02-12 12:07:20,555 161929 [pool-1-thread-2] INFO  c.i.jdd.utils.CreateOrUpdateTask - Début du traitement de la RAE 123645666
2016-02-12 12:07:20,565 161939 [pool-1-thread-2] INFO  c.i.jdd.utils.CreateOrUpdateTask - Flux : CCI
2016-02-12 12:07:20,750 162124 [pool-1-thread-2] INFO  c.i.j.e.impl.StoredProcedureDaoImpl - Appel de la procédure stockée : {? = call cci_releve(?)}
2016-02-12 12:08:19,897 221271 [pool-1-thread-2] DEBUG c.i.j.e.impl.StoredProcedureDaoImpl - ERR-FUNC01;RAE inconnue
2016-02-12 12:08:19,898 221272 [pool-1-thread-2] ERROR c.i.j.e.impl.StoredProcedureDaoImpl - Erreur fonctionnelle => ERR-FUNC01 / RAE inconnue
2016-02-12 12:08:19,923 221297 [pool-1-thread-2] WARN  c.i.jdd.utils.CreateOrUpdateTask - Pas de résultats pour cette procédure
2016-02-12 12:08:19,956 221330 [pool-1-thread-2] INFO  c.i.jdd.utils.CreateOrUpdateTask - Fin du traitement de la RAE 123645666
Donc voilà, je ne comprends pas pourquoi il n'arrive pas à me recréer le même fichier de log si celui ci a déjà été créé auparavant.

Merci pour votre aide
A+