If you don't have any special requirement, you can happily ignore which actual logger is used, just write your code for the JCL interface, leaving out of your scope any low level dependency.
However, if you want your log going to a file, and not to console, as often is the case, you have to deal with the actual logger. Not a big deal, if Logback is your choice.
Let's modify the function greeting in my GreetingController to log some (un)useful comments:
public String greeting() { log.trace("trace hello"); log.debug("debug hello"); log.info("info hello"); log.warn("warn hello"); log.error("error hello"); log.fatal("fatal hello"); return "Hello!"; }Where log is private static final object of type org.apache.commons.logging.Log initialized through the JCL LogFactory.
This could be enough. Still you should have a mildly surprising output, something like:
2016-05-30 22:14:00.888 INFO (...) : info hello 2016-05-30 22:14:00.888 WARN (...) : warn hello 2016-05-30 22:14:00.888 ERROR (...) : error hello 2016-05-30 22:14:00.888 ERROR (...) : fatal helloI edited out details in the middle of the lines, I want to focus on the fact that we miss trace and debug messages, and the fatal one became an error one. If you really want fatal log messages, logback is not your choice, since it does not have this log level, and so they are mapped as simple errors.
The first problem could be easily solved adding an entry in the Spring application.properties file (in source/main/resources). Say that I want to log all messages, from trace up to fatal, generated in my packages rooted in dd.manny. I'll add this line:
logging.level.dd.manny=traceGood. Now I want Spring to log to a file. By default the file will have name spring.log, and I can decided in which folder to be placed like this:
logging.path=/tmpNice and easy. Just one thing. I wanted the log to go exclusively to file. To get this effect I have to configure the actual logger.
For this reason I added a logback configuration file in the src/main/resources folder that is mimic of the default Spring one, but it has no appender for console. The key point is that I keep the log level to INFO and I specify FILE as appender, that is going to be set through the property specified above.
The full Spring Boot project is on github. The relevant files are GreetingController.java, application.properties, and logback.xml.
No comments:
Post a Comment