Log4j bez konfiguracji
Często piszę króciutkie programy z samym mainem tylko po to, aby sprawdzić działania nieznanej funkcji API czy właśnie zaimplementowanego algorytmu. Ot taki proof-of-concept jeszcze przed napisaniem testów jednostkowych (wiem, wiem, testy piszemy najpierw, ale...)
Aby zachować pewne standardy staram się nawet w takim testowym kodzie używać Log4j do pary z commons-logging zamiast klasycznego System.out.println(). Nie tylko lepiej wygląda, ale też Log4j zapewnia pewne dodatkowe informacje. Niestety kod:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
class Main {
private static final Log log = LogFactory.getLog(Main.class);
public static void main(String[] args) {
log.info("Example message");
}
}
spowoduje wyświetlenie co najwyżej znanego skądinąd błędu:
log4j:WARN No appenders could be found for logger (Main).
log4j:WARN Please initialize the log4j system properly.
W takich sytuacjach z reguły kopiowałem plik log4j.xml z jakiegokolwiek innego projektu, ewentualnie delikatnie go poprawiając. Całe szczęście framework zapewnia znacznie prostszą metodę konfiguracji:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;
class Main {
private static final Log log = LogFactory.getLog(Main.class);
public static void main(String[] args) {
BasicConfigurator.configure();
log.info("Example message");
}
}
I wreszcie spodziewany wynik bez żadnych niepotrzebnych plików konfiguracyjnych:
0 [main] INFO Main - Example messageTags: logging