Print Stack Trace to String Solution
V Javě, Vrhací třída a její podtřídy, jako např Výjimka si Chyba, poskytněte metodu nazvanou printStackTrace(), který se používá k zobrazení trasování zásobníku výjimky, když nastane. Ve výchozím nastavení tato metoda vytiskne trasování zásobníku na standardní chybový výstup (System.err), kterým je obvykle konzola. Aby byl ale flexibilnější a snadněji přístupný, převedeme výstup trasování zásobníku tisku na řetězec.
Abychom toho dosáhli, použijeme StringWriter si PrintWriter třídy poskytované standardní knihovnou Java. Třída StringWriter je znakový proud, který shromažďuje svůj výstup ve vyrovnávací paměti řetězců, kterou lze později použít k vytvoření řetězce. Třída PrintWriter na druhé straně tiskne formátované reprezentace objektů do textového výstupního proudu.
public static String stackTraceToString(Throwable exception) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); exception.printStackTrace(pw); return sw.toString(); }
Vysvětlení kódu krok za krokem
Podívejme se blíže na to, jak tato jednoduchá, ale užitečná metoda funguje:
- Definujeme metodu tzv stackTraceToString() která přijímá a Vrhací objekt jako argument. Tento objekt představuje výjimku nebo chybu, jejíž trasování zásobníku chceme převést na řetězec.
- Vytváříme nový StringWriter objekt tzv sw, který bude shromažďovat výstup (trasování zásobníku) ve vyrovnávací paměti řetězců.
- Vytváříme nový PrintWriter objekt tzv pw který bude použit k vytištění trasování zásobníku dané výjimky. PrintWriter bere jako svůj parametr dříve vytvořený StringWriter, což znamená, že zapíše výstup trasování zásobníku do StringWriter.
- Vyvoláme printStackTrace() metoda na Throwable objektu (výjimka, kterou jsme předali) s argumentem PrintWriter. Tím se vytiskne trasování zásobníku do StringWriter namísto standardního chybového výstupu.
- Nakonec vrátíme obsah vyrovnávací paměti StringWriter jako řetězec voláním toString () metoda na objektu StringWriter.
Pomocí této metody můžete snadno převést jakékoli trasování zásobníku na řetězec, což vám umožní protokolovat, zobrazovat nebo analyzovat chybová data podle potřeby.
Zapojené třídy standardní knihovny Java
Řešení popsané v tomto článku zahrnuje několik tříd ze standardní knihovny Java, které jsou nezbytné pro zpracování převodu trasování zásobníku na řetězec. Zde je stručný přehled jejich rolí:
- Vhazovatelné: Je to nadtřída všech chyb a výjimek v programovacím jazyce Java. Instance této třídy (nebo jejích podtříd) představují výskyt problému nebo výjimečného stavu a obsahují snímek trasování zásobníku, ke kterému lze přistupovat pomocí metody printStackTrace().
- StringWriter: Je to znakový proud, který shromažďuje svůj výstup ve vnitřní vyrovnávací paměti řetězců. Třída StringWriter je součástí třídy java.io balíček a je užitečný, když chcete do řetězce zapsat znaková data.
- PrintWriter: Tato třída tiskne formátované reprezentace objektů do textového výstupního proudu, jako je StringWriter, FileOutputStream nebo jakýkoli jiný znakový proud. Poskytuje širokou škálu metod pro zápis různých typů dat, včetně tisku trasování zásobníku Throwable objektu.
Závěrem lze říci, že převod trasování tiskového zásobníku na řetězec v Javě lze snadno provést pomocí tříd StringWriter a PrintWriter ze standardní knihovny Java. Tento přístup umožňuje vývojářům lepší přístup, zpracování a analýzu chybových informací v jejich aplikacích.