Hlavní menu
Nástroje |
SlovnikTerminologie.JemnyUvodDoLogovani HistoryHide minor edits - Show changes to markup 31 October 2009, 18:09
by
- Changed lines 88-91 from:
Instance Loggeru může volat několik metod. Jména metod jsou závislá na úrovni logu, který chceme vytvořit. Můžeme volit z dostupné škály uvedené na začátku kapitoly. Parametrem metod je Object, tedy můžeme logovat vše co potřebujeme. Jen je potřeba myslet na to, aby z logu vystupovala smysluplná data. to:
Instance Loggeru může volat několik metod. Jména metod jsou závislá na úrovni logu, který chceme vytvořit. Můžeme volit z dostupné škály uvedené na začátku kapitoly. Parametrem metod je Object, tedy můžeme logovat vše co potřebujeme. Jen je potřeba myslet na to, aby z logu vystupovala smysluplná data. Odkazy21 February 2009, 21:45
by
- Changed lines 2-3 from:
Vyjmuto z me BP. to:
Vyjmuto z me BP. (TP) 21 February 2009, 21:41
by
- Changed lines 62-76 from:
Na začátku souboru se definují balíky, které chci logovat. První řádek říká, že budu logovat celý balík cz.zcu.kiv.spot, který se bude logovat od úrovně DEBUG a výše, a tomuto logování jsou přiřazeny appendery R a stdout. Na dalších dvou řádcích přiřazuji konkrétní dvě třídy Rozdělení appenderů má ten smysl, že například můžu zmiňované controllery logovat do souboru, kam se zapisuje pouze přihlašování a odhlašování uživatelů. Zbylé dva appendery slouží k běžnému logování, R appender slouží k logování do souboru a stdout k výpisu do příkazové řádky. \par Dále je třeba nakonfigurovat konkrétní appendery. První řádka specifikuje způsob výstupu. V rámci aplikace se používá @[ConsoleAppender?@] a Nyní je aplikace připravena pro logování. Následuje příklad logování v java kódu. Nejdříve se musí vytvořit instance {\it Loggeru}:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} private Logger logger = Logger.getLogger(getClass()); \end{verbatim} \end{center} to:
Na začátku souboru se definují balíky, které chci logovat. První řádek říká, že budu logovat celý balík cz.zcu.kiv.spot, který se bude logovat od úrovně DEBUG a výše, a tomuto logování jsou přiřazeny appendery R a stdout. Na dalších dvou řádcích přiřazuji konkrétní dvě třídy Rozdělení appenderů má ten smysl, že například můžu zmiňované controllery logovat do souboru, kam se zapisuje pouze přihlašování a odhlašování uživatelů. Zbylé dva appendery slouží k běžnému logování, R appender slouží k logování do souboru a stdout k výpisu do příkazové řádky. Dále je třeba nakonfigurovat konkrétní appendery. První řádka specifikuje způsob výstupu. V rámci aplikace se používá Nyní je aplikace připravena pro logování. Následuje příklad logování v java kódu. Nejdříve se musí vytvořit instance Loggeru:
21 February 2009, 21:37
by
- Changed lines 62-63 from:
Na začátku souboru se definují balíky, které chci logovat. První řádek říká, že budu logovat celý balík {\tt cz.zcu.kiv.spot}, který se bude logovat od úrovně DEBUG a výše, a tomuto logování jsou přiřazeny appendery R a stdout. Na dalších dvou řádcích přiřazuji konkrétní dvě třídy {\it LoginController?} a {\it LogoutController?} appenderu U a logování od úrovně INFO.\par to:
Na začátku souboru se definují balíky, které chci logovat. První řádek říká, že budu logovat celý balík cz.zcu.kiv.spot, který se bude logovat od úrovně DEBUG a výše, a tomuto logování jsou přiřazeny appendery R a stdout. Na dalších dvou řádcích přiřazuji konkrétní dvě třídy Changed lines 66-67 from:
Dále je třeba nakonfigurovat konkrétní appendery. První řádka specifikuje způsob výstupu. V rámci aplikace se používá {\it ConsoleAppender?} a {\it RollingFileAppender?}. U {\it RollingFileAppenderu?} se musí nakonfigurovat výstupní soubor, buď absolutně nebo relativně. Dále se určí maximální velikost souboru. Maximální velikost neznamená, že se soubor při dosažení maximální velikosti začne od konce přepisovat, ale vytvoří se nový soubor, do kterého přenese data ze souboru původního a nové záznamy dále ukládá do původního souboru. Pak se konfiguruje, u obou výstupů stejně, vzor výstupu a poslední je {\it ConversionPattern?}, tedy formát výstupu.\par to:
Dále je třeba nakonfigurovat konkrétní appendery. První řádka specifikuje způsob výstupu. V rámci aplikace se používá @[ConsoleAppender?@] a 21 February 2009, 21:32
by
- Changed lines 77-85 from:
Tento {\it Logger} si drží informaci o třídě, ve které je vytvořen. Pokud by bylo třeba použití statického logger, pak jen nahradíme {\it getClass()} za {\it Trida.class}.\par Nyní už jen stačí na patřičném místě v kódu vytvořit logovací zprávu. Následují 2 příklady:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} to:
Tento Logger si drží informaci o třídě, ve které je vytvořen. Pokud by bylo třeba použití statického logger, pak jen nahradíme getClass() za Trida.class. Nyní už jen stačí na patřičném místě v kódu vytvořit logovací zprávu. Následují 2 příklady: [@ Changed lines 85-96 from:
} \end{verbatim} \end{center} Kód představuje zachycení vyjímky v try-catch bloku uvnitř controlleru.\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} logger.info("Prihlaseni uzivatele: " + sessionUser.getLogin() to:
}@] Kód představuje zachycení vyjímky v try-catch bloku uvnitř controlleru. [@logger.info("Prihlaseni uzivatele: " + sessionUser.getLogin() Changed lines 91-112 from:
\end{verbatim} \end{center} Tento kousek kódu stačí k zápisu přihlášení uživatele tak, jak je vidět na obrázku \ref{log-users}\par \begin{figure}[h] \begin{center} \includegraphics[width=0.8\linewidth]{pcs/log-users.eps} \caption{Výpis logovacího souboru, který loguje aktivitu uživatelů.} \label{log-users} \end{center} \end{figure} Instance {\it Loggeru} může volat několik metod. Jména metod jsou závislá na úrovni logu, který chceme vytvořit. Můžeme volit z dostupné škály uvedené na začátku kapitoly. Parametrem metod je {\it Object}, tedy můžeme logovat vše co potřebujeme. Jen je potřeba myslet na to, aby z logu vystupovala smysluplná data. Výstup z logu je vidět na obrázku \ref{log-commons}.\par \newpage \begin{figure}[h] \begin{center} \includegraphics[width=0.99\linewidth]{pcs/log-commons.eps} \caption{Výpis logovacího souboru.} \label{log-commons} \end{center} \end{figure} to:
@] Instance Loggeru může volat několik metod. Jména metod jsou závislá na úrovni logu, který chceme vytvořit. Můžeme volit z dostupné škály uvedené na začátku kapitoly. Parametrem metod je Object, tedy můžeme logovat vše co potřebujeme. Jen je potřeba myslet na to, aby z logu vystupovala smysluplná data. 21 February 2009, 21:24
by
- Changed lines 1-3 from:
Logování - jemný úvodVyjmuto z me BP... to:
LogováníVyjmuto z me BP. MotivaceChanged lines 7-51 from:
Přestože nám logování pomocí logovacích frameworků poskytuje možnosti, které se s {\it System.out.println()} nedají srovnávat, stále se setkávám s tím, že valná část studentů používá zásadně {\it System.out.println()}. Bohužel o takovýchto frameworcích ještě neslyšeli a v případě, že slyšeli, tak povětšinou tvrdí, že použití je příliš složité. Při tom ale bez logování se na profesionální úrovni neobejde žádný projekt. Použitím logovacího frameworku můžeme zrychlit vývoj aplikace a vlastní kód logování je přímý a přehledný. \par \newpage Při psaní logů jsem se rozhodl použít 4 úrovně logování:\par \begin{list}{}{} \item DEBUG - používám pro logování informací potřebných pro vývoj aplikace. \item INFO - používám pro logování aktivity uživatelů a informativní hlášky, o kterých si myslím, že by se v logu mohly vyskytnout. \item WARN - používám pro logování méně významných exceptions chycených v try-catch blocích, které nevedou k omezení funkčnosti aplikace. \item ERROR - používám pro logování exceptions chycených v try-catch blocích, při kterých dojde k omezení funkčnosti, případně spadnutí aplikace. \end{list} \subsection{Realizace} Implementace logování pomocí framework log4j není nijak složitá. Stačí mít správně nakonfigurovaného listenera a připravený property soubor log4j.properties a pak už programátor může psát vlastní logování uvnitř tříd aplikace. Na následujích řádcích je popsáno, jak snadno lze logování aplikace zprovoznit. \par Nejdříve jsem si připravil logování aplikace v souboru {\it web.xml}.\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/properties/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener?
</listener-class>
</listener>
\end{verbatim} \end{center} První context-param určuje umístění, kde se nachází konfigurační soubor pro log4j {\it log4j.properties}. Logování by ale nefungovalo bez potřebného listeneru. Tento {\it Log4jConfigListener?} nám zajišťuje načtení konfigurace a následné zapisování do patřičných lokací uvedených v konfiguračním souboru.\par \newpage Dále je třeba zanést konfiguraci do souboru:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} log4j.category.cz.zcu.kiv.spot=DEBUG, stdout, R to:
Přestože nám logování pomocí logovacích frameworků poskytuje možnosti, které se s Při psaní logů jsem se rozhodl použít 4 úrovně logování:
RealizaceImplementace logování pomocí framework log4j není nijak složitá. Stačí mít správně nakonfigurovaného listenera a připravený property soubor log4j.properties a pak už programátor může psát vlastní logování uvnitř tříd aplikace. Na následujích řádcích je popsáno, jak snadno lze logování aplikace zprovoznit. Nejdříve jsem si připravil logování aplikace v souboru web.xml. <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/properties/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> První context-param určuje umístění, kde se nachází konfigurační soubor pro log4j log4j.properties. Logování by ale nefungovalo bez potřebného listeneru. Tento Dále je třeba zanést konfiguraci do souboru: [@log4j.category.cz.zcu.kiv.spot=DEBUG, stdout, R Changed lines 60-63 from:
\end{verbatim} \end{center} to:
@] 21 February 2009, 21:14
by
- Added lines 1-141:
Logování - jemný úvodVyjmuto z me BP... Použití logovacího frameworku log4j namísto klasického Přestože nám logování pomocí logovacích frameworků poskytuje možnosti, které se s {\it System.out.println()} nedají srovnávat, stále se setkávám s tím, že valná část studentů používá zásadně {\it System.out.println()}. Bohužel o takovýchto frameworcích ještě neslyšeli a v případě, že slyšeli, tak povětšinou tvrdí, že použití je příliš složité. Při tom ale bez logování se na profesionální úrovni neobejde žádný projekt. Použitím logovacího frameworku můžeme zrychlit vývoj aplikace a vlastní kód logování je přímý a přehledný. \par \newpage Při psaní logů jsem se rozhodl použít 4 úrovně logování:\par \begin{list}{}{} \item DEBUG - používám pro logování informací potřebných pro vývoj aplikace. \item INFO - používám pro logování aktivity uživatelů a informativní hlášky, o kterých si myslím, že by se v logu mohly vyskytnout. \item WARN - používám pro logování méně významných exceptions chycených v try-catch blocích, které nevedou k omezení funkčnosti aplikace. \item ERROR - používám pro logování exceptions chycených v try-catch blocích, při kterých dojde k omezení funkčnosti, případně spadnutí aplikace. \end{list} \subsection{Realizace} Implementace logování pomocí framework log4j není nijak složitá. Stačí mít správně nakonfigurovaného listenera a připravený property soubor log4j.properties a pak už programátor může psát vlastní logování uvnitř tříd aplikace. Na následujích řádcích je popsáno, jak snadno lze logování aplikace zprovoznit. \par Nejdříve jsem si připravil logování aplikace v souboru {\it web.xml}.\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/properties/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener?
</listener-class>
</listener>
\end{verbatim} \end{center} První context-param určuje umístění, kde se nachází konfigurační soubor pro log4j {\it log4j.properties}. Logování by ale nefungovalo bez potřebného listeneru. Tento {\it Log4jConfigListener?} nám zajišťuje načtení konfigurace a následné zapisování do patřičných lokací uvedených v konfiguračním souboru.\par \newpage Dále je třeba zanést konfiguraci do souboru:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} log4j.category.cz.zcu.kiv.spot=DEBUG, stdout, R log4j.category.cz.zcu.kiv.spot.controllers.LogoutController?=INFO, U log4j.category.cz.zcu.kiv.spot.controllers.LoginController?=INFO, U
log4j.appender.stdout=org.apache.log4j.ConsoleAppender? log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout? log4j.appender.stdout.layout.ConversionPattern?=%5p C{1}:L):n
log4j.appender.R=org.apache.log4j.RollingFileAppender? log4j.appender.R.File=logs/spot-commons.log log4j.appender.R.MaxFileSize?=5MB log4j.appender.R.layout=org.apache.log4j.PatternLayout? log4j.appender.R.layout.ConversionPattern?=%5p c{1}:L) : n
log4j.appender.U=org.apache.log4j.RollingFileAppender? log4j.appender.U.File=logs/spot-users.log log4j.appender.U.MaxFileSize?=5MB log4j.appender.U.layout=org.apache.log4j.PatternLayout? log4j.appender.U.layout.ConversionPattern?=%d{yyyy-MM-dd HH:mm:ss} - n \end{verbatim} \end{center} Na začátku souboru se definují balíky, které chci logovat. První řádek říká, že budu logovat celý balík {\tt cz.zcu.kiv.spot}, který se bude logovat od úrovně DEBUG a výše, a tomuto logování jsou přiřazeny appendery R a stdout. Na dalších dvou řádcích přiřazuji konkrétní dvě třídy {\it LoginController?} a {\it LogoutController?} appenderu U a logování od úrovně INFO.\par Rozdělení appenderů má ten smysl, že například můžu zmiňované controllery logovat do souboru, kam se zapisuje pouze přihlašování a odhlašování uživatelů. Zbylé dva appendery slouží k běžnému logování, R appender slouží k logování do souboru a stdout k výpisu do příkazové řádky. \par Dále je třeba nakonfigurovat konkrétní appendery. První řádka specifikuje způsob výstupu. V rámci aplikace se používá {\it ConsoleAppender?} a {\it RollingFileAppender?}. U {\it RollingFileAppenderu?} se musí nakonfigurovat výstupní soubor, buď absolutně nebo relativně. Dále se určí maximální velikost souboru. Maximální velikost neznamená, že se soubor při dosažení maximální velikosti začne od konce přepisovat, ale vytvoří se nový soubor, do kterého přenese data ze souboru původního a nové záznamy dále ukládá do původního souboru. Pak se konfiguruje, u obou výstupů stejně, vzor výstupu a poslední je {\it ConversionPattern?}, tedy formát výstupu.\par Nyní je aplikace připravena pro logování. Následuje příklad logování v java kódu. Nejdříve se musí vytvořit instance {\it Loggeru}:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} private Logger logger = Logger.getLogger(getClass()); \end{verbatim} \end{center} Tento {\it Logger} si drží informaci o třídě, ve které je vytvořen. Pokud by bylo třeba použití statického logger, pak jen nahradíme {\it getClass()} za {\it Trida.class}.\par Nyní už jen stačí na patřičném místě v kódu vytvořit logovací zprávu. Následují 2 příklady:\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} catch (Exception e) { logger.error("Nastala chyba v aplikaci. " + e); mv.addObject("errorImportMsg", "db.access-error"); } \end{verbatim} \end{center} Kód představuje zachycení vyjímky v try-catch bloku uvnitř controlleru.\par \begin{center} \fontsize{10pt}{1} \selectfont \begin{verbatim} logger.info("Prihlaseni uzivatele: " + sessionUser.getLogin() + " IP: " + request.getRemoteAddr()); \end{verbatim} \end{center} Tento kousek kódu stačí k zápisu přihlášení uživatele tak, jak je vidět na obrázku \ref{log-users}\par \begin{figure}[h] \begin{center} \includegraphics[width=0.8\linewidth]{pcs/log-users.eps} \caption{Výpis logovacího souboru, který loguje aktivitu uživatelů.} \label{log-users} \end{center} \end{figure} Instance {\it Loggeru} může volat několik metod. Jména metod jsou závislá na úrovni logu, který chceme vytvořit. Můžeme volit z dostupné škály uvedené na začátku kapitoly. Parametrem metod je {\it Object}, tedy můžeme logovat vše co potřebujeme. Jen je potřeba myslet na to, aby z logu vystupovala smysluplná data. Výstup z logu je vidět na obrázku \ref{log-commons}.\par \newpage \begin{figure}[h] \begin{center} \includegraphics[width=0.99\linewidth]{pcs/log-commons.eps} \caption{Výpis logovacího souboru.} \label{log-commons} \end{center} \end{figure} |