(alvast sorry voor lange intro, maar ik wil graag duidelijk zijn)
Ik heb een applicatie die kan loggen. Hiervoor gebruik ik een logger class die dmv een stack met unieke 'logsleutels' bepaald welk niveau een logregel heeft.
een logregel kan dus op die manier meerdere logregels bevatten.
Verder heb ik een 'connection' class die mijn databaseverbinding beheerd. Eigenlijk beheerd die class een instantie van mijn businesslaag, en die heeft op zijn beurt weer een databaseverbinding.
Mijn businesslaag wil zijn loginformatie kwijt, en heeft daarvoor een delegate. Bij de initialisatie van mijn businesslaag vul ik de delegate's met logfuncties, die weer gebruik maken van mijn logger class.
Zo is het dus zo dat ik 1 businesslaag heb, die 1 logger instantie kent.
die 1e logger instantie kan ik dmv een functie een niveau laten zakken, door te zeggen dat zijn laatste logregel de parent moet worden van de nu volgende logregels.
Evengoed kan ik hem weer een niveau terug laten gaan zodat alle nu volgende logregels weer hun vorige parent hebben.
Op deze manier kan mijn applicatie zeggen
Nu is het dus zo dat ik na het loggen van logregel 1 tegen mijn logger zeg dat hij een niveau dieper moet.
ditzelfde gebeurd bij regel 4, zodat wanneer mijn businesslaag wil loggen, de logregels onder logregel 4 komen.
Daarna zeg ik tegen de logger dat hij weer een niveau omhoog moet.
Nu komt echter het probleem:
Wanneer ik multithreading doe (wat wel eens voorkomt) krijg ik zo'n soort tabel:
in bovenstaande tabel heb ik een zoekscherm waarop tegelijk 2 zoekacties worden gedaan.
Hoe ga ik daar vanaf komen?
Ik ben er al achter dat ik dan waarschijnlijk mijn logger geen stack moet laten bijhouden, maar moet zorgen dat ik elke logger instantie een parent geef, zodat een logger instantie meerdere childs kan bevatten.
Echter werkt dit opzich prima, behalve met mijn delegates. Het is namelijk zo dat ik maar 1 instantie heb van mijn businesslaag, en de logdelegate daarvan kan ik dus maar 1x zetten.
De logger instantie die ik dus in die delegate gebruik ook.
En daar hield mijn creatieve vermogen ongeveer op....
Ik heb een applicatie die kan loggen. Hiervoor gebruik ik een logger class die dmv een stack met unieke 'logsleutels' bepaald welk niveau een logregel heeft.
een logregel kan dus op die manier meerdere logregels bevatten.
Verder heb ik een 'connection' class die mijn databaseverbinding beheerd. Eigenlijk beheerd die class een instantie van mijn businesslaag, en die heeft op zijn beurt weer een databaseverbinding.
Mijn businesslaag wil zijn loginformatie kwijt, en heeft daarvoor een delegate. Bij de initialisatie van mijn businesslaag vul ik de delegate's met logfuncties, die weer gebruik maken van mijn logger class.
Zo is het dus zo dat ik 1 businesslaag heb, die 1 logger instantie kent.
die 1e logger instantie kan ik dmv een functie een niveau laten zakken, door te zeggen dat zijn laatste logregel de parent moet worden van de nu volgende logregels.
Evengoed kan ik hem weer een niveau terug laten gaan zodat alle nu volgende logregels weer hun vorige parent hebben.
Op deze manier kan mijn applicatie zeggen
log ID | parent ID | bericht |
---|---|---|
1 | 0 | gebruiker is ingelogd |
2 | 1 | scherm 1 wordt geopend |
3 | 1 | zoekscherm wordt geopend |
4 | 1 | zoekactie wordt gedaan |
5 | 4 | SELECT * FROM .... |
6 | 4 | SELECT * FROM .... |
7 | 1 | gebruiker logt uit |
Nu is het dus zo dat ik na het loggen van logregel 1 tegen mijn logger zeg dat hij een niveau dieper moet.
ditzelfde gebeurd bij regel 4, zodat wanneer mijn businesslaag wil loggen, de logregels onder logregel 4 komen.
Daarna zeg ik tegen de logger dat hij weer een niveau omhoog moet.
Nu komt echter het probleem:
Wanneer ik multithreading doe (wat wel eens voorkomt) krijg ik zo'n soort tabel:
log ID | parent ID | bericht |
---|---|---|
1 | 0 | gebruiker is ingelogd |
2 | 1 | scherm 1 wordt geopend |
3 | 1 | zoekscherm wordt geopend |
4 | 1 | zoekactie wordt gedaan |
5 | 4 | SELECT * FROM .... |
6 | 4 | zoekactie wordt gedaan |
7 | 6 | SELECT * FROM .... |
8 | 6 | SELECT * FROM .... |
9 | 4 | SELECT * FROM .... |
10 | 1 | gebruiker logt uit |
in bovenstaande tabel heb ik een zoekscherm waarop tegelijk 2 zoekacties worden gedaan.
Hoe ga ik daar vanaf komen?
Ik ben er al achter dat ik dan waarschijnlijk mijn logger geen stack moet laten bijhouden, maar moet zorgen dat ik elke logger instantie een parent geef, zodat een logger instantie meerdere childs kan bevatten.
Echter werkt dit opzich prima, behalve met mijn delegates. Het is namelijk zo dat ik maar 1 instantie heb van mijn businesslaag, en de logdelegate daarvan kan ik dus maar 1x zetten.
De logger instantie die ik dus in die delegate gebruik ook.
En daar hield mijn creatieve vermogen ongeveer op....
This message was sent on 100% recyclable electrons.