Podivejte se na org.apache.log4j.MDC. Je to ve sve podstate mapa udrzovana
kazdym vlaknem a je standardne pristupna pres pattern ve formatu
%X{nazevneceho}

V kodu je pak nekde MDC.put("nazevneceho", nejakejObjekt) cimz se tato
promenna v Thread inicializuje.

Jirka

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of [EMAIL PROTECTED]
Sent: Thursday, September 25, 2008 3:50 PM
To: [email protected]
Subject: log4j & custom Layout


Dobry den,
uz delsi dobu se trapim s problemem rozsiritelnosti log4j. Potreboval bych
do kazdeho log recordu pridat nejaky identifikator, ceho se tento record
tyka - tedy napr. pri prichodu JMS zpravy (vetsina komunikace v nasi
aplikaci) z ni vyextrahuju cislo letu, kod aerolinky a datum odletu a tyto
data ulozim do ThreadLocal. A ted bych chtel, aby tyto informace log4j
vypsal. Chtel bych tedy mit neco jako PatternLayout s nejakym takovym
patternem:

%-5p [%d{ISO8601}][%t][%C{1}.%M(%L)] %Q %m%n

kde %Q bude odpovidat nejakemu memu potomkovi PatternConverteru, ktery vezme
informaci z ThreadLocalu a vypise ji. Jake ovsem bylo moje prekvapeni, kdyz
jsem zjistil, ze PatternParser je prakticky nerozsiritelny. I kdybych se uz
snizil na prepsani jeho metody parse(), tak narazim, protoze vsechny
existujici PatternConvertery jsou jaxi private.

Predpokladam, ze to nekdy nekdo uz musel resit! Napadlo me sice par reseni
ale vsechny jsou tak nejak nepouzitelne anebo pripominaji skrabani se levou
rukou za pravym uchem (jako treba "nejvic nejinovativnejsi" reseni:
rozparsovani patternu na jednotlive elementy, pruchod chainem Converteru a
nahrazeni toho, ktery odpovida %Q tim mym).

Predem diky za jakekoliv nakopnuti.
Dan.

Odpovedet emailem