I'm using log4j for the first time in a project. A fellow programmer told me that using System.out.println
is considered a bad style and that log4j is something like standard for logging matters nowadays.
We do lots of JUnit testing - System.out
stuff turns out to be harder to test.
Therefore I began utilizing log4j for a Console controller class, that's just handling command-line parameters.
// log4j logger config
org.apache.log4j.BasicConfigurator.configure();
Logger logger = LoggerFactory.getLogger(Console.class);
Category cat = Category.getRoot();
Seems to work:
logger.debug("String");
Produces:
1 [main] DEBUG project.prototype.controller.Console - String
I got two questions regarding this:
- From my basic understanding using this logger should provide me comfortable options to write a logfile with timestamps - instead of spamming the console - if debug mode is enabled at the logger?
- Why is System.out.println harder to test? I searched stackoverflow and found a testing recipe. So I wonder what kind of advantage I really get by using log4j.
System.out
andSystem.err
give you 80% of the functionality with 20% of the hell of a logging framework. – Bertsche