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 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"/>
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())
})
try {
throw new Exception("Some exception")
} catch (Exception ex) {
palio.Groovy.module("log").error("myLogger", ex.getMessage(), ex)
}
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")
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()) })