Získanie 'Namespace + MethodName' pre logovanie   otázka

C#

Dobrý deň ,mám aplikáciu ktorá komunikuje s WebService a potreboval som tam niečo ako logovanie a napríklad pri výpise že bola operácia úspešna sa zapíše aj názov namespace + metódy. Pomocou google som našiel tento kód :

private static string GetMethodInfo()
        {
            try
            {
                System.Type type = typeof(Server.Command);
                return type.ToString() + ".";
            }
            catch (Exception ex)
            {
                return "Failure generating namespace info(" + ex.Message + ")";
            }
        }

ale kód na získavanie vyzerá takto :

GetMethodInfo() + System.Reflection.MethodInfo.GetCurrentMethod().Name

a mám pocit že to nieje najrozumnejšie riešenie. Predstavoval by som si to skôr že by sa zavolal GetMethodInfo() a ten by už navrátil aj Method().Name a netrebalo by to spájať alebo možno je nato úplne iný kód. A tiež by ma zaujímalo či nieje lepšie napísať

System.Type type = typeof(Server.Command);

mimo GetMethodInfo() aby sa stále nevytvárala. Aj v iných prípadoch mám vytvorene premenne hned na začiatku triedy a používam v metódach 'ref' a na konci operácie ich vyčistím a v dalšej operácii znovu použijem. Ak mi viete niekto poradiť budem vdačný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zbytečné. Do chybového protokolu stačí uložit StackTrace z vyjímky a tam je všechno včetně názvu souboru, metody a řádku na kterém k vyjímce došlo (pokud je s binárkou dodán PDB soubor s debug informacemi).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dakujem za odpoved, ano v príbade chyby je StackTrace užitočný ,ale niekedy sú na server posielané príkazy a po vykonaní server odpovedá v tvare :

[success/failure]~[method:*namespace + metóda*]~[output:*bud niaky detailny výpis ak sa jedna o príkaz čo získava údaje alebo jednoducho "done"]

a vtom prípade by sa mi hodil aj názov metódy lebo všetko WebService zapisuje do súboru (ActivityLog).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak som to našiel dúfam že je ten kód v poriadku :

private string GetMethodInfo()
        {
            System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
            return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + "." + stackTrace.GetFrame(1).GetMethod().Name;
        }

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback