понедельник, 18 октября 2010 г.

log4j

Это библиотека для логирования приложения, разрабатываемая by apache.org. Есть не только для явы -- log4php, log4c, log4python...


Система базируется на трех китах:
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 

Комментариев нет:

Отправить комментарий