#import "_features.html" as f> <@f.scaffold title="@Log (and friends)" logline="Captain's Log, stardate 24435.7: "What was that line again?""> <@f.history>
The various @Log
variants were added in lombok v0.10.
NEW in lombok 0.10: You can annotate any class with a log annotation to let lombok generate a logger field.
The logger is named log
and the field's type depends on which logger you have selected.
NEW in lombok v1.16.24: Addition of google's FluentLogger (flogger).
@f.history> <@f.overview>
You put the variant of @Log
on your class (whichever one applies to the logging system you use); you then have a static final log
field, initialized to the name of your class, which you can then use to write log statements.
There are several choices available:
@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Flogger
private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
By default, the topic (or name) of the logger will be the class name of the class annotated with the @Log
annotation. This can be customised by specifying the topic
parameter. For example: @XSlf4j(topic="reporting")
.
lombok.log.fieldName
= an identifier (default: log
).
log
', but you can change it to a different name with this setting.
lombok.log.fieldIsStatic
= [true
| false
] (default: true)
static
field. By setting this key to false
, the generated field will be an instance field instead.
lombok.log.flagUsage
= [warning
| error
] (default: not set)
lombok.log.apacheCommons.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.apachecommons.CommonsLog
as a warning or error if configured.
lombok.log.flogger.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.flogger.Flogger
as a warning or error if configured.
lombok.log.jbosslog.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.jbosslog.JBossLog
as a warning or error if configured.
lombok.log.javaUtilLogging.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.java.Log
as a warning or error if configured.
lombok.log.log4j.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.log4j.Log4j
as a warning or error if configured.
lombok.log.log4j2.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.log4j.Log4j2
as a warning or error if configured.
lombok.log.slf4j.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.slf4j.Slf4j
as a warning or error if configured.
lombok.log.xslf4j.flagUsage
= [warning
| error
] (default: not set)
@lombok.extern.slf4j.XSlf4j
as a warning or error if configured.
If a field called log
already exists, a warning will be emitted and no code will be generated.
A future feature of lombok's diverse log annotations is to find calls to the logger field and, if the chosen logging framework supports it and the log level can be compile-time determined from the log call, guard it with an if
statement. This way if the log statement ends up being ignored, the potentially expensive calculation of the log string is avoided entirely. This does mean that you should NOT put any side-effects in the expression that you log.