Decors
Log an event like this:
import com.jcabi.log.Logger;
class Foo {
void bar(int value) {
final long start = System.nanoTime();
// some operations
Logger.debug(
this,
"bar(%d): done in %[nano]d",
value,
System.nanoTime() - start
);
}
}You will see something like this in log:
[DEBUG] Foo: #bar(1234): done in 3.45ms
Nano-seconds will be formatted as time through a built-in "decor".
There are a few other pre-defined decors:
dom-- convertsorg.w3c.dom.Nodeto text.exception-- exception message and full stacktrace;list-- array or list of elements into text;ms-- milliseconds into their text presentation;nano-- nanoseconds into their text presentation;text-- makes text readable;type-- type name of the object.
In order to use your own decor just implement java.util.Formattable:
import com.jcabi.log.Decor;
import java.util.Formattable;
import java.util.Formatter;
public final class DataDecor implements Formattable {
private final transient Data data;
public DataDecor(final Data dat) {
this.data = dat;
}
@Override
public void formatTo(final Formatter formatter, final int flags,
final int width, final int precision) {
formatter.format("%s", this.data.getSomeValueOutOfIt());
}
}Then, provide its class name in log formatting string, for example:
import com.jcabi.log.Logger;
public class Main {
public static void main(String[] args) {
Logger.debug(
this,
"bar(%d): show some data: %[com.example.DataDecor]s",
value,
data
);
}
}