Hlavní menu
Nástroje |
SlovnikTerminologie.JemnyUvodDoLogovani HistoryHide minor edits - Show changes to output 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. h3. Odkazy * LogovaciKonvence 21 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 ''[@LoginController@]'' a ''[@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á ''@[ConsoleAppender@]'' a ''[@RollingFileAppender@]''. U ''[@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 ''[@ConversionPattern@]'', tedy formát výstupu. 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 ''[@LoginController@]'' a ''[@LogoutController@]'' appenderu U a logování od úrovně INFO. 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á ''[@ConsoleAppender@]'' a ''[@RollingFileAppender@]''. U ''[@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 ''[@ConversionPattern@]'', tedy formát výstupu. 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'': [@private Logger logger = Logger.getLogger(getClass());@] 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 ''[@LoginController@]'' a ''[@LogoutController@]'' appenderu U a logování od úrovně INFO.\par 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 ''[@RollingFileAppender@]''. U ''[@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 ''[@ConversionPattern@]'', tedy formát výstupu. 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:
h1. Logování - jemný úvod Vyjmuto z me BP... to:
h1. Logování Vyjmuto z me BP. h3. Motivace Changed 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 [@System.out.println()@] nedají srovnávat, stále se setkávám s tím, že valná část studentů používá zásadně [@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ý. Při psaní logů jsem se rozhodl použít 4 úrovně logování: * DEBUG - používám pro logování informací potřebných pro vývoj aplikace. * 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. * 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. * 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. h3. 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. 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 ''[@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. 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:
h1. Logování - jemný úvod Vyjmuto z me BP... Použití logovacího frameworku log4j namísto klasického [@System.out.println()@] má mnoho výhod. Mezi nimi jsou různé typy výstupů(xml soubor, příkazová řádka, log soubor, GUI komponenta, vzdálený socket server, JMS, NT Event Loggers, a vzdálený UNIX Syslog daemon). Možnost centrální konfigurace přes properties soubor. Předdefinovaná hiearchie úrovní logování(TRACE, DEBUG, INFO, WARN, ERROR a FATAL) s možností vytvoření vlastní úrovně logování pro nějaké speciální případy. Snadná implementace do aplikace. Poslední výhodou je snadno nastavitelný formát záznamů, do kterého můžeme snadno zanést mnoho rozličných informací. 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.logger.org.springframework.web.servlet=DEBUG, stdout, R #log4j.logger.org.springframework=DEBUG, stdout, R # Nastaveni logovani pro konsoli 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 %d %C{1}:%M(line %L):%m%n # Nastaveni logovani pro vystup do souboru 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 %d %c{1}:%M(line %L) : %m%n # Appender pro logovani prihlaseni a odhlaseni uzivatelu 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} - %m%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} |