Sdileni MDC mezi nezavislymi vlakny
Ahoj, k logovani pouzivam Log4j a tridu MDC (http://logging.apache.org/log4j/docs/api/org/apache/log4j/MDC.html). MDC je udelane jako InheritableThreadLocal, cili kazde vlakno a jeho potomek na nej dosahne. Muj problem je ten, ze mam dva nezavisle pooly threadu a potrebuju logovat v ramci toho MDC. Vztah mezi vlakny tedy neni parent-child. thread1{ MDC.put(x, x) call Foo } Foo{ call thread2 } thread2{ logger.debug(log something) } Kdyz thread 2 neco zaloguje, nevidi na MDC, ktere je svazano s threadem 1. Kdyz se podivam na tridu NDC (http://logging.apache.org/log4j/docs/api/org/apache/log4j/NDC.html), tak ma metody cloneStack a inherit, ale MDC nic takoveho nema. Napada me, ze jedina cesta jak to udelat, bude zkopirovat obsah MDC v threadu 2. thread1{ MDC.put(x, x) call Foo } Foo{ Map m = MDC.getContext() call thread2(m) } thread2{ copy m to MDC logger.debug(log something) } -- S pozdravem Roman Dagi Pichlik /* http://www.sweb.cz/pichlik/ Blog pro kodery */
Re: Sdileni MDC mezi nezavislymi vlakny
Roman Pichlík wrote: Ahoj, k logovani pouzivam Log4j a tridu MDC (http://logging.apache.org/log4j/docs/api/org/apache/log4j/MDC.html). MDC je udelane jako InheritableThreadLocal, cili kazde vlakno a jeho potomek na nej dosahne. Muj problem je ten, ze mam dva nezavisle pooly threadu a potrebuju logovat v ramci toho MDC. Vztah mezi vlakny tedy neni parent-child. thread1{ MDC.put(x, x) call Foo } Foo{ call thread2 } thread2{ logger.debug(log something) } Kdyz thread 2 neco zaloguje, nevidi na MDC, ktere je svazano s threadem 1. Kdyz se podivam na tridu NDC (http://logging.apache.org/log4j/docs/api/org/apache/log4j/NDC.html), tak ma metody cloneStack a inherit, ale MDC nic takoveho nema. Napada me, ze jedina cesta jak to udelat, bude zkopirovat obsah MDC v threadu 2. Moc tomu nerozumim, ale podle popisu te tridy NDC existuje prave proto, aby kazde vlakno logovalo zvlast, takze mi prijde nesmyslne ji chtit sdilet mezi vlakny. Mimo to ten vyse uvedeny zapis je nejaky divny, trida dedici z Thread neni samotnym vlaknem, jenom obycejnym kodem. Samotne vlakno je neco mimo jazyk, a jazykovym konstruktem pro spusteni vlakna je jenom volani jeji metody start(). Takze call thread2 nerozumim co by to melo delat. Vlakno se neda volat, volani provadi puvodni vlakno. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: [EMAIL PROTECTED] Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Sdileni MDC mezi nezavislymi vlakny
Roman Pichlík wrote: kazde vlakno loguje samo o sobe, v tom neni zadny problem. Do MDC ci NDC lze vlozit informaci, ktera se zobrazi v logu s kazdou logovanou udalosti daneho vlakna. Kdyz buud mit vlakno A, ktere spusti vlakno B bude se mezi nimi jak MDC tak i NDC sdilet. Tedy informace, ktere ulozi vlakno A do NDC/MDC se objevi i v logovaci udalosti, kterou vytvori vlakno B. Kdyz vlakna A i B nebudou ve vztahu otec-dite, nebude se mezi nimi MDC/NDC sdilet. NDC ma pro tenhle ucel metodu inherit, diky ktere lze dosahnout sdilene logovaciho kontextu mezi temi vlakny. MDC takovou moznost nema a ja ji potrebuju. Nic vic, nic min v tom neni. A musi ten kontext sdilet ? Nestacilo by v obou vlaknech vlozit stejnou informaci ? V logovacim vypisu se to stejne nepozna. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: [EMAIL PROTECTED] Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Sdileni MDC mezi nezavislymi vlakny
Martin Kuba napsal(a): Roman Pichlík wrote: kazde vlakno loguje samo o sobe, v tom neni zadny problem. Do MDC ci NDC lze vlozit informaci, ktera se zobrazi v logu s kazdou logovanou udalosti daneho vlakna. Kdyz buud mit vlakno A, ktere spusti vlakno B bude se mezi nimi jak MDC tak i NDC sdilet. Tedy informace, ktere ulozi vlakno A do NDC/MDC se objevi i v logovaci udalosti, kterou vytvori vlakno B. Kdyz vlakna A i B nebudou ve vztahu otec-dite, nebude se mezi nimi MDC/NDC sdilet. NDC ma pro tenhle ucel metodu inherit, diky ktere lze dosahnout sdilene logovaciho kontextu mezi temi vlakny. MDC takovou moznost nema a ja ji potrebuju. Nic vic, nic min v tom neni. A musi ten kontext sdilet ? Nestacilo by v obou vlaknech vlozit stejnou informaci ? V logovacim vypisu se to stejne nepozna. kdyby to bylo tak jednoduche, nespamoval bych diskusni skupinu :-). Vlakno B na tu informaci nedosahne. -- S pozdravem Roman Dagi Pichlik /* http://www.sweb.cz/pichlik/ Blog pro kodery */