为了更细粒度的日志我们可以同时使用几种logger。不同的软件组件可以使用不同的logger。
下面的例子来自一个视频录制应用:
Logger videologger = Logger . getLogger ( " se .matangle . video" ) ;
logger .warn ( " disk is dangerously low " )
我们可以使用几种不同的日志等级,为我们的日志增加更大的明确性
log4j的术语来说,日志消息最后结尾的地方被称为appender。有很多可用的
appender,比如控制台、文件、网络目标地址和logger后台进程。
布局控制我们的日志信息格式。这允许我们使用类似printf的转义序列格式。
下面是模式中每个字段代表的意思:
* 第一个字段是从程序开始运行后经过的时间,以微秒计算。
* 第二个字段是发起日志请求的线程。
* 第三个字段是曰志语句的等级。
* 第四个字段是和日志请求关联的logger名字。
* ”之后的文本是消息语句。
Log4j努力让日志的配置暴露给外部的应用。这样开发人员就可以通过在文件或者控制台配置让日志在本地工作。随后,当应用被部署在产品服务器时,管理员可以将日志的appender配置为其他东西,比如我们后面要讨论的ELK。这种方式不需要修改代码,而且我们在部署的时候可以修改日志的行为和目的地。
WildFly这样的应用服务器通过实现log4j系统插件为自己提供配置系统。
如果你不使用应用服务器也没关系,log4j的新版本支持很多不同的配置格式。下面是
一个XML格式的文件,它会在classpath上寻找log4j2-test.xml文件:
< ?xml version=- "l.O " encoding= "UTF-8 " ?>
<Configuration status="WARN">
<Appenders>
<Console name="Console " target=" SYSTEM OUT" >
<PatternLayout pattern=" d { HH : mm : ss . SSS } [ t ] -51evellogger { 36 } - omsgoon"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>