Java-122-log4j2-2-认识log4j2之Logger

简介: 昨天看了log4j2的Appender,今天来看一下Logger。

昨天看了log4j2的Appender,今天来看一下Logger。

<Loggers><Rootlevel="debug"><AppenderRefref="Console"/><AppenderRefref="debug_appender"/><AppenderRefref="error_appender"/></Root><Loggername="DOMAIN-DIGEST"additivity="false"level="${log_level}"><AppenderRefref="Console"/><AppenderRefref="error_appender"/></Logger></Loggers>

   Logger元素用来定义一个日志输出器,指定logger的设置,在xml中配置在Loggers标签里。我们可以在代码中获取此Logger的实例来选择哪些日志输出到对应的Logger。

常见的有两种:

Root

Logger

   Root就是默认的根Logger,也是一个特殊的Logger,是所有logger的根,其他所有的logger都会直接或者间接地继承自root。比如一个name为org.apache.commons的logger会继承name为org.apache的logger,这就是默认的继承机制。

属性:

additivity: 取值为"true"(默认)或者"false",是否继承父logger的属性。如果想要不遵循默认的继承机制,可以使用additivity="false"来配置。

level:定义该logger的日志级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.其中FATAL级别最高,TRACE级别最低。


提示:

   root logger可以用Logger.getRootLogger()方法获取,但是不能通过Logger.getLogger("root")获得。

   在代码中,我们可以获取对应Logger的实例来选择日志的输出,比如获name为com.xing的Logger,可以这么获取:

privatefinalstaticLoggerlog=LoggerFactory.getLogger("com.xing");

   这里log就是name为"com.xing"的Logger的实例,log就可以指定多个appender来输出到不同的地方。


下面看下日志的级别:level

OFF(关闭)

FATAL(致命的)

ERROR(错误)

WARN(警告)

INFO(信息)

DEBUG (调试)

ALL(所有)

   输出日志的策略由此Level决定,例如:如果logger的Level设置为INFO,那么系统只输出INFO以及以上(WARN、ERROR、FATAL)信息。

   级别也是会遵循继承机制的,如果当前logger没有设定Level,它会使用它继承的Logger的Level作为它自己的Level来处理。如果它的上级也没有设置Level,那么就找上上级,几次类推,直到root为止,(root的Level是不能设为空的,所以最终一定会找到一个Level)。默认root的Level是INFO,其他logger的Level默认都是null,需要手动指定。


在开发中,我们如何将日志打印到不同的地方呢?

publicstaticLoggerinfoLogger=Logger.getLogger("DOMAIN-DIGEST");
publicstaticLoggererrorLogger=Logger.getLogger("error.logger");

只要如上获取不同的logger实例就可以了。


官方推荐使用AsyncLogger 来实现异步:

两种异步:全局异步和混合异步。

全局异步就是,所有日志都异步的记录,也有两种实现方式:

第一种在配置文件上不用做任何改动,只需要添加一个 log4j2.component.properties 配置到 resources:

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

第二种JVM启动参数(boot.ini)加上:

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector”

混合异步就是log4j2.xml配置文件中使用AsyncRoot/AsyncLogger替代Root/Logger

例如:

<Loggers><!--自定义logger对象includeLocation="false"关闭日志记录的行号信息,开启的话会严重影响异步输出的性能additivity="false"不再继承rootlogger对象--><AsyncLoggername="com.xing"level="trace"includeLocation="false"additivity="false"><AppenderRefref="Console"/></AsyncLogger><Rootlevel="debug"><!--指定日志输出到控制台--><AppenderRefref="Console"/><!--Async的Appender使用异步的方式输出--><AppenderRefref="Async"/></Root></Loggers>


总结:

   Logger用来选择实例去记录日志,有一个根Logger叫Root,可以自定义很多的Logger,他们默认有继承关系,可以使用additivity属性阻断。可以使用异步来优化性能!


END

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
28天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
89 1
|
5月前
|
Java Spring
spring boot 配置log4j 日志
spring boot 配置log4j 日志
71 0
|
4月前
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
4月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
204 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
8天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
16 0
|
12天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
32 3
|
18天前
|
Java Spring
日志精准记录:Spring与Log4j完美整合的实战指南
日志精准记录:Spring与Log4j完美整合的实战指南
18 0
日志精准记录:Spring与Log4j完美整合的实战指南
|
2月前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
20 0
|
3月前
|
供应链 Java 测试技术
开发Java应用时如何用好Log
开发Java应用时如何用好Log
77 3
|
3月前
|
JSON 监控 Java
Java Web开发中的异常处理与日志记录最佳实践
Java Web开发中的异常处理与日志记录最佳实践