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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 昨天看了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日志并进行多维度分析。
目录
相关文章
|
4天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
85 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
30天前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
188 3
|
3月前
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
|
15天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
20 5
|
14天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
29 2
|
2月前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
3月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
Java应用结构规范问题之AllLoggers接口获取异常日志的Logger实例的问题如何解决
|
3月前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)