Log4j2 简介

article/2025/9/18 16:45:16

介绍

    Log4j2是Log4j的升级版,与之前的版本Log4j 1.x相比、有重大的改进,修正了Logback固有的架构问题的同事,改进了许多Logback所具有的功能。


特性

一、API 分离

    Log4j2将API与实现分离开来。开发人员现在可以很清楚的知道能够使用哪些没有兼容问题的类和方法,同事又允许通过自己实现来增加功能。

二、改进性能

    Log4j2的性能在某些关键领域比Log4j 1.x更快,而且大多数情况下与Logback相当。

三、支持多种 API

    Log4j 2提供了最棒的性能的同事,还支持SLF4J和公共日志记录API。

四、自动装加载
    像Logback一样,一旦配置发生改变,Log4j2可以自动载入这些更改后的配置信息,又与Logback不同,配置发生改变时不会丢失任何日志事件。

五、高级过滤功能

    与Logback类似,Log4Jj2可以支持基于上下文数据、标记、正则表达式以及日志时间中的其他组件的过滤。Log4j2能够专门制定适用于所有的事件,无论这些事件在传入Loggers之前还是正在传给appenders。另外,过滤器还可以与Loggers关联其阿里。与Logback不同的是,Filter公共类可以用于任何情况。

六、插件架构

    所有可以配置的组件都以Log4j插件的形式来定义。同样地,不需要修改任何Log4j代码就可以创建新的Appender、layout、Pattern Convert等等。Log4j自动识别预定义的插件,如果在配置中引用到这些插件,Log4j就会自动载入使用。

七、属性支持

    属性可以在配置文件中引用,也可以直接替代或传入潜在的组件,属性在这些组件中能够动态解析。属性可以是配置文件、属性文件、环境变量、线程上下文映射以及事件中的数据中定义的值。用户可以通过增加自己的Lookup插件来定制自己的属性。

改进

一、更为先进的API (Modern API)在此之前,程序员们如下方式进行日志记录:

    if(logger.isDebugEnabled()) {logger.debug("Hi, " + u.getA() + “ “ + u.getB());}

许多人都会抱怨上述代码的可读性太差了。如果有人忘记写if语句,程序输出中会多出很多不必要的字符串。现在Java虚拟机(JVM)也许对字符串的打印和输出进行了很多优化,但是难道我们仅仅依靠JVM优化来解决上述问题?

log4j2 开发团队鉴于以上考虑对API进行了完善。

现在你可以这样写代码:

logger.debug("Hi, {} {}", u.getA(), u.getB());

和其他一些流行的日志框架一样,新的API也支持变量参数的占位符功能。

log4j2 还支持其他一些很棒的功能,像Markers 和 Flow Traces:

    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();}

Markers可以帮助你很快地找到具体的日志项(Log Entries)。而在某个方法的开头和结尾调用Flow Traces中的一些方法,你可以在日志文件中看到很多新的跟踪层次的日志项,也就是说,你的程序工作流(Program Flow)被记录下来了。下面是Flow Traces的一些例子:

9:08:07.056 TRACE com.test.TestService 19 retrieveMessage - entry
9:08:07.060 TRACE com.test.TestService 46 getKey - entry

二、强大的配置功能(Powerful Configuration)

    log4j2的配置变得非常简单。如果你习惯了之前的配置方式,也不用担心,你只要花少许时间就可以从之前的方式转到新的方式。请看下面的配置文件(默认):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="error"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>

上面说的知识一部分改进,你还可以自动重新加载配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="30">...
</configuration>

监控的时间间隔单位为秒,最小值是5。这意味着,log4j2在配置改变的情况下可以重新配置日志记录行为。如果值设置为0或者负数,log4j2不会对配置变更进行检测。最为称道的一点是:不像其他日志框架,log4j2在重新配置的时候不会丢失之前的日志记录。

三、java 5并发性(Concurrency)

    有一段文档是这样描述的:“log4j2 利用 Java 5 中的并发特性支持,尽可能地执行最低层次的加锁...”。Apache log4j2 解决了许多在log4j1.x 中仍然存留的死锁问题。如果你的程序仍然饱受内存泄漏的折磨,请毫不犹豫地试一下log4j2。


使用

一、程序中如果使用Log4j2?

    在你的程序中使用Log4j2之前必须确保log4j-api.jar和log4j-core.jar在程序的classpath中。使用Maven将下面的依赖加入pom.xml。

<dependencies><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.11.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.11.0</version></dependency>
</dependencies>

这里随便写个类,调用就是这么简单,log4j的核心在配置文件上,若不创建配置文件,使用默认配置文件。

问:那么默认的Level是多少呢?

   答: 默认的输出地是console,默认的级别是ERROR级别。

/*** Created by Ray on 2018/3/28 0028.**/
public class Hello {static Logger logger = LogManager.getLogger(Hello.class.getName());public static void main(String[] args) {logger.trace("entry"); //开始时调用logger.error("Did it again!"); //error级别的信息logger.info("我是info信息"); //info级别的信息logger.debug("我是debug信息");logger.warn("我是warn信息");logger.fatal("我是fatal信息");logger.log(Level.DEBUG,"我是debug信息"); //指定Level类型的调用logger.trace("exit"); //结束时调用}
}

输出结果:


代码跟输出不一致? 

莫慌!先来看看日志级别

转载于:https://www.cnblogs.com/Remenber-Ray/p/8858038.html


http://chatgpt.dhexx.cn/article/JTN5nA4C.shtml

相关文章

数据分析方法08用户画像

用户画像 1、 概念 用户画像是指用户信息标签化&#xff0c;通过收集用户多维度的信息数据&#xff08;如人口统计属性&#xff0c;社会属性&#xff0c;行为偏好&#xff0c;消费习惯等&#xff09;&#xff0c;对其进行统计&#xff0c;分析&#xff0c;从而抽象出用户信息…

用户画像及其应用案例分享

一、用户画像基础概念 用户画像&#xff0c;即用户信息标签化&#xff0c;通过收集用户的社会属性、消费习惯、偏好特征等各个维度的数据&#xff0c;对用户特征属性进行刻画&#xff0c;并对这些特征进行分析、统计&#xff0c;挖掘潜在价值信息&#xff0c;从而抽象出用户的…

大数据分析--用户画像

从去年还在北京工作的时候就开始不断的听说&#xff0c;用户画像、用户画像&#xff0c;而且&#xff0c;有个项目&#xff0c;项目领导美其名曰&#xff1a;用户画像&#xff0c;这么长时间&#xff0c;也没有真正的思考过什么叫用户画像。前几天看到一篇关于这方面的文章&…

【数据分析】京东平台用户画像分析

1.用户信息标签 用户信息的收集包括用户基础要素、用户场景、行为偏好、心理个性、交际等多方面。 可以用静态标签、动态标签两大类来划分。 静态数据:用户相对稳定的信息&#xff0c;主要包括人口属性、商业属性等方面数据&#xff1b;这类信息果企业有真实信息则无需过多建…

用户画像解析

用户画像是大数据行业言必及之的时髦概念。现在我们运营谈及用户画像&#xff0c;它也是和精准营销、精细化运营直接钩挂的。这篇文章主要讲产品和运营角度的用户画像。 一、什么是用户画像 用户画像一点也不神秘&#xff0c;它是根据用户在互联网留下的种种数据&#xff0c;主…

用户画像分析总结

一、 什么是用户画像 用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。通俗说就是给用户打标签&#xff0c;而标签是通过对用户信息分析而来的高度精炼的特征标识。通过打标签可以利用一些高度概括、容易理解的特征来描述用户&…

用户画像详解来了

导读&#xff1a;今天主要和大家分享明略对于用户画像的认识&#xff0c;包括如何理解用户画像&#xff0c;为什么需要用户用画像&#xff0c;以及明略在建设和应用用户画像过程中总结的方法论&#xff0c;让大家了解如何构建好的用户画像。 01 什么是用户画像 首先来看用户画像…

Python的import

Python里面的import语句用于导入一个已经写好的包或者模块 使得自己的程序里面可以使用导入的模块里面的函数、变量等 import name 导入numpy模块&#xff0c;里面有一个shape函数&#xff0c;要使用这个函数&#xff0c;numpy.shape()即可 但是不加numpy就不行&#xff0c;…

python-import this

优美胜于丑陋&#xff08;python 以编写优美的代码为目标&#xff09; 明了胜于晦涩&#xff08;优美的代码应该是明了的&#xff0c;命名规范&#xff0c;风格相似&#xff09; 简洁胜于复杂&#xff08;优美的代码应当是简洁的&#xff0c;不要有复杂的内部实现&#xff09…

import re

元字符 px* 可以匹配 p px px... px 可以匹配 px px... 但是不能匹配到p默认的匹配都是贪婪匹配 贪婪匹配就是一次匹配尽可能多的内容比如正则是 aoe 要匹配的字符串是 aoeeeeee 它可以匹配到aoeeeeee 但是如果正则是 aoe? 的话 它只能匹配到aoe ?放在 * {n,m}是取消贪婪匹…

1.连接服务器

1 使用服务器 参考文章&#xff1a;https://blog.csdn.net/longgeaisisi/article/details/78680180 双11通过团购入手阿里云服务器会得到一个提货券&#xff0c;同时收到短信提醒&#xff0c;跟着短信链接&#xff0c;进入阿里云控制台使用提货券。然后&#xff0c;会出现选项…

windows下连接服务器

一、windows下连接服务器 xhsell 是一个windows的软件 是用来连接远程服务器的 使用的是ssh协议 xftp 一个windows的软件 用来给服务器 上传或者下载文件的一个工具 ftp协议 shell环境 是运行命令的环境 shell脚本 用于给运维人员 来去做批量处理的 一个语言shell语言编写的一个…

linux之连接服务器

1. 背景 通常连接服务器使用ssh usernamehostname的方式&#xff0c;其中uername是用户名&#xff0c;一般为root等。hostname为ip地址。但是ip地址通常不容易记住&#xff0c;因此会将ip地址与一个名称相对应&#xff0c;然后直接使用名字来登陆服务器。 2. ip与name的映射 …

远程服务器怎么连接

利用windows自带远程桌面连接服务器&#xff0c;海星星 日付服务器 碉堡了 工具/原料 远程桌面 IP地址账号 方法/步骤 1 本商品直接使用WINDOWS自带的远程桌面连接就可以进行使用。 点开始——点运行&#xff08;或者直接用窗口键[win]R&#xff09;————在运行对话框输入m…

连接服务器

连接是什么意思 创建套接字之后&#xff0c;应用程序&#xff08;浏览器&#xff09;就会调用connect&#xff0c;随后协议栈会将本地的套接字与服务器的套接字进行连接。话说&#xff0c;以太网的网线都是一直连接的状态&#xff0c;我们并不需要来回插拔网线&#xff0c;那么…

创建链接服务器

GPS平台、网站建设、软件开发、系统运维&#xff0c;找森大网络科技&#xff01; https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p1862 给SQL Server创建连接服务器 一、 可视化界面操作 1.点击“新建连接服务器” 2.“常规”选…

如何连接云服务器

** - 本篇文章是&#xff1a;教跟我一样一开始不会连接远程云服务器的小白们 ** 首先你已经有一个公网ip&#xff08;在阿里云/腾讯云/等等许多地方都可以租到&#xff09; 注&#xff1a;作者本人申请了一个试用的华为云2008Windows64bit的服务器 以下教你如何一步步连接…

连接到服务器(1)

问题一&#xff08;未找到或无法访问服务器&#xff09; 标题: 连接到服务器 ------------------------------ 无法连接到 TOM-PC。 ------------------------------ 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证…

如何连接服务器

1&#xff1a; 先进入 C:/uers/<username>/.ssh/config 2:添加 Host <IP> HostName <IP> User <username> 3进入vscode 设置 搜索 remote 然后连接

远程连接服务器

1、什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前 登录 linux 主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐 在系统前面一样。 2、远程连接服务器的功能 分享主机…