Sdileni MDC mezi nezavislymi vlakny

2005-11-09 Tema obsahu Roman Pichlík

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

2005-11-09 Tema obsahu Martin Kuba

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

2005-11-09 Tema obsahu Martin Kuba

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

2005-11-09 Tema obsahu Roman Pichlík

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 */