Система базируется на трех китах:
Logger -- наблюдатели за своими обьектами, которые они логируют.
Appenders -- обьекты, которые определяют куда будут писаться логи.
Layout -- обьекты определяющие форма выводимых логов.
К логерам добавляются аппендеры, таким образом логи могут выводится в несколько мест.
Логер имеет состояния, которые определяют какие сообщения из кода выводить, а какие нет:
DEBUG < INFO < WARN < ERROR < FATALВот так выводятся сообщения:
logger.warn("Low fuel level.");
logger.debug("Debug message.");
logger.info("Info message.");Если у логера стоит состояние:
logger.setLevel(Level.WARN);То сообщения fatal, error, warn будут выводиться.
А info, debug нет.
Логеры живут по иерархичному принципу. Все они наследники Root.
Все они наследуют от родителя аппендеров и их лейаутов. Если какому-то логеру поставить флаг Additivity = false, то он не возмет от предков аппендеров.
Вот пример кода с простыми настройками по-умолчанию:
import com.foo.Bar;
// Import log4j classes.
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
public class MyApp {
// Define a static logger variable so that it references the
// Logger instance named "MyApp".
static Logger logger = Logger.getLogger(MyApp.class);
public static void main(String[] args) {
// Set up a simple configuration that logs on the console.
BasicConfigurator.configure();
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
}
package com.foo;
import org.apache.log4j.Logger;
public class Bar {
static Logger logger = Logger.getLogger(Bar.class);
public void doIt() {
logger.debug("Did it again!");
}
}
А вот результат:0 [main] INFO MyApp - Entering application. 36 [main] DEBUG com.foo.Bar - Did it again! 51 [main] INFO MyApp - Exiting application.
А вот пример с внешними настройками в файле:
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
// BasicConfigurator replaced with PropertyConfigurator.
PropertyConfigurator.configure(args[0]);
logger.info("Entering application.");
Bar bar = new Bar();
bar.doIt();
logger.info("Exiting application.");
}
} А вот пример файла:
# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Комментариев нет:
Отправить комментарий