Log


Opis

Moduł Log zapewnia prosty dostęp do mechanizmu logowania zaimplementowanego w jPALIO. Mechanizmy ten został oparty na bibliotece log4j. Mechanizm logowania umożliwia tworzenie nowych loggerów, ich hierarchii oraz konfigurowanie dla nich różnych poziomów logowania. Wyróżniamy następujące poziomy logowania:

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

Metody w module odpowiadają powyższym poziomom. Domyślnym poziomem dla wszystkich logów jest poziom INFO. Poziom logowania określa minimalny poziom, dla którego logi mają być rejestrowane. Przykładowo jeżeli dla danego loggera ustawimy poziom logowania na WARN to zostaną zarejestrowane logi dla poziomu WARN, ERROR i FATAL, a logi TRACE, DEBUG i INFO zostaną pominięte. Wszystkie loggery domyślnie logują wpisy do plików.

Każda instancja jPALIO posiada domyślne loggery o nastepujących nazwach:

W celu skorzystania z domyślnych loggerów należy wywołać metody z modułu, dla których nie trzeba wskazywać nazwy loggera.

Mechanizm logowania jPALIO umożliwia tworzenie hierarchii loggerów. Hierachię tą tworzy się poprzez odpowiednią konwencję nadawania nazw loggerom. Przykładowo logger jpalio.warn jest podrzędny w stosunku do loggera jpalio. Przy domyślnych ustawieniach pisanie do logów przy użyciu loggera jpalio.warn skutkuje propagowaniem wpisów do loggera jpalio.

Aby utworzyć własnego loggera dla danej instancji jPALIO należy wywołać metody które jako pierwszy argument przyjmują nazwę loggera.

UWAGA!

W przypadku własnych loggerów utworzonych w ramach danej instancji jPALIO należy pamiętać, że faktyczną nazwą loggera jest

[nazwa instancji].[nazwa loggera]

Jest to bardzo istotne z punktu widzenia zaawansowanej konfiguracji loggerów

Konfiguracja

Konfiguracja loggerów jest możliwa poprzez dodanie wpisów do konfiguracji instancji jPALIO. Przykładowa, prosta konfiguracja loggera o nazwie myLogger

<instance>
...
<logger name="myLogger" level="DEBUG"/>
 ...
</instance>

 

Poniżej przedstawiono pełną listę parametrów konfiguracyjnych

name Nazwa loggera
dir Ścieżka katalogu do którego pisane są logi (domyślnie nazwa instancji)
level Poziom notowanych logów. dopuszczalne wartości: TRACE, DEBUG, INFO, WARN, ERROR, FATAL (domyślnie INFO)
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
appender Określa w jaki sposób tworzone są nowe pliki logów (na koniec dnia, godziny itp) (domyślnie "yyyy-MM-dd"), wyjątek - log sqlConnector który ma wartość "yyyy-MM-dd-HH"
pattern Szablon wpisu do logu. Domyślna wartość: "%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n".
Zobacz pełną specyfikację opisu szablonu
additivity Określa czy wpis ma być propagowany do logów nadrzędnych (domyślnie "true")

 


 

 

 

 

 

Przykłady bardziej zaawansowanych konfiguracji loggerów instancji

<logger name="test1" dir="/var/log/jpalio/logs/jpalio/test1" level="INFO" />
<logger name="test2" dir="/var/log/jpalio/logs/jpalio/test2" level="DEBUG" />
<logger name="sqlConnector" appender="yyyy-MM-dd-HH" pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n" additivity="true"/>
<logger name="sqlConnector" appender="yyyy-MM-dd-HH"/>

Przykłady

Przykład użycia w języku jPALIO

Proste wywołania metod modułu

$// Default loggers
$log.trace("trace message")
$log.debug("debug message")
$log.info("info message")
$log.warn("warn message")
$log.error("error message")
$log.fatal("fatal message")

$// Custom loggers
$log.trace("myLogger", "trace message")
$log.debug("myLogger", "debug message")
$log.info("myLogger", "info message")
$log.warn("myLogger", "warn message")
$log.error("myLogger", "error message")
$log.fatal("myLogger", "fatal message")

 

Typowe zastosowanie

$// Typical use
$try({
$// Some operation throwing an exception (dividing by zero)
$/(10, 0)
}, {
$log.error("myLogger", $error.getMessage(), $error.getLastError())
})

 

Przykład użycia w języku Groovy/JAVA

try {
    throw new Exception("Some exception")
} catch (Exception ex) {
    palio.Groovy.module("log").error("myLogger", ex.getMessage(), ex)
}

 

Dla zaawansowanych

Moduł Log pełni funkcję pośrednika dla klasy palio.Logger. Klasa ta jest fabryką loggerów dla środowiska jPALIO. W przypadku gdy chcemy uzyskać bezpośredni dostęp do instancji klasy org.apache.log4j.Logger związanym z loggerem o podanej nazwie możemy tego dokonać w sposób następujący:

org.apache.log4j.Logger logger = palio.Logger.getLogger("myLogger")

Dobre praktyki

W przypadku dużych aplikacji zalecane jest aby nie używać jednego loggera do rejestrowania wszystkich logów. Rozsądnym podejściem w większości przypadków jest tworzenie loggerów dla grup funkjonalności lub warstw aplikacji (logiki bizneswej, dostępu do danych).

$try({
    $// Some business exception
    $error.throwError("Some business exception")
}, {
    $log.error("business", $error.getMessage())
})