log4j 2.0开发团队鉴于以上考虑对API进行了完善。现在你可以这样写代码:
logger.debug("Hi, {} {}", u.getA(), u.getB());和其它一些流行的日志框架一样, 新的API也支持变量参数的占位符功能。
log4j 2.0还支持其它一些很棒的功能,像Markers和flow tracing:
private Logger logger = LogManager.getLogger(MyApp.class.getName()); private static final Marker QUERY_MARKER = MarkerManager.getMarker("SQL"); ... public String doQuery(String table) { logger.entry(param); logger.debug(QUERY_MARKER, "SELECT * FROM {}", table); return logger.exit(); }
插件式的架构
log4j 2.0支持插件式的架构。你可以根据需要自行扩展log4j 2.0,这非常简单。首先,你要为你的扩展建立好命名空间,然后告诉log4j 2.0在哪能够找到它。
<configuration … packages="de.grobmeier.examples.log4j2.plugins">根据上述配置,log4j 2将会在de.grobmeier.examples.log4j2.plugins包中找寻你的扩展插件。如果你建立了多个命名空间,没关系,用逗号分隔就可以了。
下面是一个简单的扩展插件:
@Plugin(name = "Sandbox", type = "Core", elementType = "appender") public class SandboxAppender extends AppenderBase { private SandboxAppender(String name, Filter filter) { super(name, filter, null); } public void append(LogEvent event) { System.out.println(event.getMessage().getFormattedMessage()); } @PluginFactory public static SandboxAppender createAppender( @PluginAttr("name") String name, @PluginElement("filters") Filter filter) { return new SandboxAppender(name, filter); } }
log4j 2的配置变得非常简单。如果你习惯了之前的配置方式,也不用担心,你只要花很少的时间就可以从之前的方式转换到新的方式。请看下面的配置:
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <logger name="com.foo.Bar" level="trace" additivity="false"> <appender-ref ref="Console"/> </logger> <root level="error"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
还有一个非常不错的改进,那就是:同XML相比,如果你更加喜欢JSON,你可以自由地进行基于JSON的配置了:
{ "configuration": { "appenders": { "Console": { "name": "STDOUT", "PatternLayout": { "pattern": "%m%n" } } }, "loggers": { "logger": { "name": "EventLogger", "level": "info", "additivity": "false", "appender-ref": { "ref": "Routing" } }, "root": { "level": "error", "appender-ref": { "ref": "STDOUT" } } } } }新的配置方式实在是太强大了,支持诸如 属性替代( property substitution)的特性。请查看相关配置手册以获得更多细节 manual pages。
评论删除后,数据将无法恢复
评论(2)