I’m currently working on a web application using Spring MVC, and I use the @ExceptionHandler annotation in every controllers of the application.
So basically I got a method like this:
@ExceptionHandler(RuntimeException.class)
public String handleException(RuntimeException ex) {
injectedService.notifyAndLogException(ex.getMessage());
return ("error_page");
}
My idea is to log and send an email to an application administrator in the injected service.
For now, I’ve tried to read some documentation about logging in spring application, and all the things I’ve seen is setting a static logger in each controller.
Like this:
private final Logger log = LoggerFactory.getLogger(Controller.class);
@ExceptionHandler(RuntimeException.class)
public String handleException(RuntimeException ex) {
log.info("Logging error");
injectedService.notifyException(ex.getMessage());
return ("error_page");
}
I’d like to know what is the point to use a logger in each controller instead of using it in one point only (the service)?
If you use a single logger for the whole application, then every log message will be logged as coming from the same component. By using a logger per class or component, then your log files will contain information about which component logged the message.
For example, when you do:
This creates a logger with the name of the
Controllerclass, which will generally be displayed in the log file, e.g.This is just a convention, but it’s a good one that I advise you follow.