FreeMarker integrates with the following logging packages: SLF4J, Apache Commons Logging, Log4J, Avalon LogKit, and java.util.logging (Java 1.4 and above). By default, FreeMarker will look for the following logging packages in this order, and will automatically use the first package it finds: Log4J, Avalon, java.util.logging. However, if you call the static selectLoggerLibrary method on the freemarker.log.Logger class with appropriate parameter and before using any FreeMarker classes that log messages, you can explicitly select a logger package, or even disable the logging. See the API documentation for more details.


Prior to FreeMarker 2.4, SLF4J and Apache Commons Logging aren't searched automatically due to backward compatibility constraints, so to use one of them you must do this:

import freemarker.log.Logger;
    // IMPORTANT: This should be executed before using other FreeMarker classes!
    Logger.selectLoggerLibrary(Logger.LIBRARY_SLF4J);  // or Logger.LIBRARY_COMMONS

Doing this is recommended, because starting from 2.4 SLF4J will be used by default if present, otherwise Apache Commons Logging if present, otherwise Log4J if present, etc.

All log messages produced by FreeMarker are logged into the logger hierarchy whose top-level logger is named freemarker. Currently used loggers are:

Logger name Purpose
freemarker.beans Logs messages of the Beans wrapper module.
freemarker.cache Logs messages related to template loading and caching.
freemarker.runtime Logs template exceptions thrown during template processing.
freemarker.runtime.attempt Logs template exceptions thrown during template processing, but caught by attempt/recover directives. Enable DEBUG severity to see the exceptions.
freemarker.servlet Logs messages of the FreemarkerServlet class.
freemarker.jsp Logs messages of the FreeMarker JSP support.

You can call the static selectLoggerLibrary method on the freemarker.log.Logger class and pass it a string that will be used to prefix the above mentioned logger names. This is useful if you want to have separate loggers on a per-web-application basis (assuming the application uses its own local freemarker.jar). Also, you can disable logging with Logger.selectLoggerLibrary(Logger.LIBRARY_NONE). In any case, selectLoggerLibrary must be called early, before FreeMarker could log anything, or else it will not have (consistent) effect.

FreeMarker Manual -- For FreeMarker 2.3.20
HTML generated: 2013-06-27 20:54:33 GMT
Edited with XMLMind XML Editor