Tak nakonec jsem to nemohl udelat presne tak, jak jsem si predstavoval, protoze ten navrh aplikace je proste spatnej, kdyz se na nej zpetne divam. Jak se rika po kazdem projektu:"Ted bych to udelal cele uplne jinak".

Kvuli kruhovym referencim a podobnym chutovkam jsem nemohl jednoduse zaclenit logovaci modul a nechtel jsem ho nasilne cpat do nejakeho uz existujiciho modulu, protoze by to pro me bylo neprehledne.
Reseni, ktere jsem pouzil je opravdu hnusne a doufam, ze neopusti steny tohoto fora

Kazdy modul pri vytvareni fasady dostane jako argument delegata logovaci metody (parametr pointer na metodu). A v pripade potreby zalogovani jen zavola tuto metodu. Takhle to probubla az do modulu pro logovani, ktery provede zalogovani do interniho souboru (tam jsou vsechny potrebne informace pro programatora, pri reseni chyb aplikace, jako je vypis stack trace apod.), pokud ma uzivatel zapnute logovani i pro sebe, tak nektere informace se zaloguji i do uzivatelskeho logu.
Ta metoda (tu co si posilam jako parametr) ma jako parametr objekt, ktery rozsiruje EventArgs, takze v miste chyby muzu specifikovat, o jak zavaznou chybu se jedna, tim jak to probublava, se muze tento status menit, protoze na urovni tridy to je treba zavazna chyba, ale tato trida nevi, ze se potom tento stav osetruje treba na urovni modulu, ktery si s tim uz umi poradit, a tak zmeni status z kriticke chyby na nejakou slabsi variantu.
Dale muzu menit i uzivatelskou zpravu. Tu nemusim zadat vubec na urovni tridy, ale jakmile probublavam vys, tak vim, co chyba zpusobila z pohledu uzivatele, a mohu ji doplnit o pro nej relevantni informace. No a do GUI uz prijde jen informace o typu chyby (zavaznost), cas a uzivatelska zprava. Nektere chyby se tak k uzivateli vubec nedostanou, protoze pro nej nejsou uzitecne.
Jediny problem, ktery nastal (dost podstatny), jsou singleton tridy (vetsinou jadra modulů), ktere maji static konstruktory a tak jim nemohu predat tuto metodu. Zatim jsem to vyresil tak, ze ty static konstruktory budou prazdne, a protoze tyto singleton tridy pouzivam az pri vytvoreni fasady nad nimi, tak ihned po jejich prvnim pouziti (tim padem zavolanim statickeho konstruktoru) ve fasada zavolam inicializaci jadra (inicializace objektu, ve kterych muze nastat chyba). V tu chvili uz totiz muzu predat jadru logovaci metodu.
Vim, ze to je strasne harakiri, a defakto jsem sahl na kazdy kousek kodu. Tedy minimalne do kazdeho modulu.