log4j2的使用

基础用法

1. pom文件导入依赖

junit用来做测试

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

2. resource目录下新增log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
    <!--  定义所有的appender -->
    <appenders>
        <!--   输出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--    控制台只输出level及以上级别的信息(onMatch),其他的打印拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--    输出日志的格式 -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - |%m|%xEx%n"/>
        </Console>

        <!--   append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
        <File name="log" fileName="f:/log4j2/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %m%xEx%n"/>
        </File>

        <!--   添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
        <File name="ERROR" fileName="f:/log4j2/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %m%xEx%n"/>
        </File>

        <!--   打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFile" fileName="f:/log4j2/web.log" filePattern="logs/${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %m%xEx%n"/>
            <SizeBasedTriggeringPolicy size="2MB"/>
        </RollingFile>
    </appenders>

    <!--  定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!--   建立一个默认的root的logger -->
        <root level="trace">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
            <appender-ref ref="ERROR" />
            <appender-ref ref="log"/>
        </root>

    </loggers>
</configuration>

2. 测试

public class Log4j2Test {
    Logger logger= LogManager.getLogger(Log4j2Test.class);
    @Test
    public void test1() {
        logger.error("hello);
    }
}

log4j2.xml的%符号详解

%d输出时间,可指定格式,比如:%-d{yyyy-MM-dd HH:mm:ss,SSS}按照年月日时分秒打印
%p输出日志级别
%t输出该日志事件的线程名
%c输出该日志信息所在的类名,比如com.xxx.xxx
%M输出该日志信息的所在的方法名
%F输出该日志信息的所在的文件名,比如xxx.java
%L输出该日志信息在代码文件中的行号
%l输出该日志信息的位置信息,相当于%c.%M(%F:%L)的组合,显示为com.xxx.xxx.方法名(xxx.java:行号)
%m输出具体的日志信息,也可以用%msg代替
%n输出一个回车换行符
%%输出一个"%"

log4j2.xml的PatternLayout中有个enc标签,可对日志进行转义,可以把普通日志转义成HTML,XML,JSON,CRLF,默认是转义成HTML。常见用法如下:

a.转义成HTML:%enc{%m}

b.转义成JSON:%enc{%m}{JSON}

使用log4j2打印日志踩坑

1. 使用enc转义后无法识别回车换行:

 如下是测试代码,打印的日志中包含由"\n"回车符号:

public class Log4j2Test {
    Logger logger= LogManager.getLogger(Log4j2Test.class);
    @Test
    public void test1() {
        logger.error("hello : " + "it is \n" + "error");
    }
}

a. 如果是一个普通的打印配置:

<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - |%m|%xEx%n"/>

        打印结果如下,能准确识别出这个回车符号:

b.如果是加了enc转义符号:

<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - |%enc{%m}|%xEx%n"/>

打印结果如下,无法识别回车符号,把"\n"当作普通字符打印:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/397122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第五次作业(防御安全)

需求: 1.办公区设备可以通过电信链路和移动链路上网&#xff08;多对多的NAT&#xff0c;并且需要保留一个公网IP 不能用来转换&#xff09; 2.分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 3.分公司内部的客户端可以通过公网地址访问到内部的服务…

两大公示 总结先行先试经验,提炼可复制推广成果

2024年1月18日&#xff0c;水利部官网发布《数字孪生水利建设典型案例名录&#xff08;2023年&#xff09;》&#xff08;共28项&#xff0c;排名不分先后&#xff09;、《数字孪生水利建设十大样板名单&#xff08;2023年&#xff09;》&#xff08;排名不分先后&#xff09;等…

从数据库中读取文件导出为Excel

使用的库&#xff08;org.apache.poi&#xff09; 在poi包中有Apache提供的各种分类文件&#xff0c;如下 结构功能HSSF读写Microsoft Excel XLS文件XSSF读写Microsoft Excel OOXML XLSX文件HWPF读写Microsoft Word DOC文件HSLF读写Microsoft PowerPoint文件 下面以XSSF为例&…

代码随想录算法训练营29期|day55 任务以及具体安排

第九章 动态规划part12 309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {//0代表持股票&#xff0c;1代表保持卖出状态&#xff0c;2代表卖出股票。3代表冷冻int[][] dp new int[prices.length][4];dp[0][0] -prices[0];for(int i 1 ; …

Redis事务长什么样?一文带你全面了解

一、概述 1.1、Redis事务简介 在 Redis 中&#xff0c;事务是一组命令的有序队列&#xff0c;Redis 使用 MULTI、EXEC、WATCH 和 DISCARD 等命令来实现事务。事务的执行是原子的&#xff0c;要么所有命令都执行成功&#xff0c;要么所有命令都不执行。事务中的命令在 EXEC 执行…

Avalonia学习(二十五)-系统界面

目前项目式练习&#xff0c;界面内容偏多&#xff0c;所以不给大家贴代码了&#xff0c;可以留言交流。此次为大家展示的是物联项目的例子&#xff0c;仅仅是学习&#xff0c;我把一些重点列举一下。 界面无边框 同前面 treeview控件 通过treevie控件导航 tabcontrol控件 …

AUTOSAR CP--chapter7从CAN网络学习Autosar通信

从CAN网络学习Autosar通信 前言缩写词CAN通信在AUTOSAR架构中的传输上位机配置 第六章总结&#xff1a;学习了如何使用工具的自动配置功能&#xff0c;位我们生成系统描述中部分ecu的BSW模块配置&#xff0c;但是自动配置的功能虽然为我们提供了极大的便利&#xff0c;我们仍然…

css3的var()函数

css3的var()函数 变量要以两个连字符--(横杆)(减号)为开头 变量可以在:root{}中定义, :root可以在css中创建全局样式变量。通过 :root本身写的样式&#xff0c;相当于 html&#xff0c;但优先级比后者高。 在CSS3中&#xff0c;var()函数是一个用于插入CSS自定义属性&#xff…

Active Directory 的密码管理策略

员工使用的密码可以决定或破坏组织中的数据安全性&#xff0c;但是&#xff0c;知道员工通常不遵循良好的密码卫生习惯也就不足为奇了。从在本机工具&#xff08;如 Windows Active Directory 组策略&#xff09;中设置弱密码和通用密码到宽松的密码策略规则&#xff0c;有几个…

Eclipse - Text Editors (文本编辑器)

Eclipse - Text Editors [文本编辑器] References Window -> Preferences -> General -> Editors -> Text Editors Displayed tab witdth: 4 勾选 Insert spaces for tabs 勾选 Show line number References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

学习总结19

# 奶牛的耳语 ## 题目描述 在你的养牛场&#xff0c;所有的奶牛都养在一排呈直线的牛栏中。一共有 n 头奶牛&#xff0c;其中第 i 头牛在直线上所处的位置可以用一个整数坐标 pi(0< pi < 10^8) 来表示。在无聊的日子里&#xff0c;奶牛们常常在自己的牛栏里与其它奶牛交…

【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog 前言 在以前的Databricks中&#xff0c;主要由Workspace和集群、SQL Warehouse组成&#xff0c; 这两年Databricks公…

NLP_BERT与GPT争锋

文章目录 介绍小结 介绍 在开始训练GPT之前&#xff0c;我们先比较一下BERT和 GPT 这两种基于 Transformer 的预训练模型结构&#xff0c;找出它们的异同。 Transformer架构被提出后不久&#xff0c;一大批基于这个架构的预训练模型就如雨后春笋般地出现了。其中最重要、影响…

2024全年放假日历表及调休安排 用手机便签设置放假倒计时

对于绝大多数的上班族来说&#xff0c;春节长假已经结束&#xff0c;现在要回归到正常的工作和生活中。为了给生活增加一些“盼头”&#xff0c;很多小伙伴不约而同打开手机日历&#xff0c;查看下个法定节假日是什么时候。下面给大家具体讲一下2024全年放假日历表及调休安排&a…

EasySass: could not generate CSS file. See Output panel for details.微信小程序报错及解决

解决微信小程序导入vscode的easysass包报错 问题发现问题来源和解决制作不易&#xff0c;感谢三联&#xff0c;谢谢大家啦 问题发现 当我喜滋滋的在vscode中导入easysass包之后&#xff0c;又在微信小程序中添加vscode扩展&#xff0c;又去文件中改好了配置文件后却直接弹出了…

5G——物理层仿真

1.前置条件 2.仿真流程 1.填写搜索过程 解&#xff1a; 2.填写每一步细节 2.2.1 准备 解&#xff1a; &#xff08;1&#xff09;BCH &#xff08;2&#xff09;BCCH 解析&#xff1a;因为PBCH是物理广播信道&#xff0c;BCCH是用于广播系统控制信息的下行信道&#…

生成对抗网络----GAN

系列文章目录 文章目录 系列文章目录前言一、基本构成二、应用领域三、基本原理四、如何训练GAN 前言 一、基本构成 GAN (Generative Adversarial Network) : 通过两个神经网络&#xff0c;即生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#…

【Linux 内核源码分析】虚拟内存地址空间

在现代操作系统中&#xff0c;每个进程被分配了独享的虚拟内存地址空间。这个地址空间可以视为一维线性空间&#xff0c;由多个连续的内存页组成。初始时&#xff0c;操作系统会将整个虚拟地址空间分成几个不同的区域&#xff0c;每个区域用于特定的目的。以下是一个常见的布局…

【Linux取经路】文件系统之重定向的实现原理

文章目录 一、再来理解重定向1.1 输出重定向效果演示1.2 重定向的原理1.3 dup21.4 输入重定向效果演示1.5 输入重定向代码实现 二、再来理解标准输出和标准错误2.1 同时对标准输出和标准错误进行重定向2.2 将标准输出和标准错误重定向到同一个文件 三、再看一切皆文件四、结语 …

Camtasia 2023 v23.4.2.51146 Win功能强大的屏幕录制和视频编辑软件

Camtasia 2023.3.4.2是一款适用于各类用户的屏幕录制和视频编辑软件&#xff0c;特别适合需要制作教育、培训和营销视频的专业人士。它结合了易用性和多样的功能&#xff0c;使视频制作变得更加高效和专业。 软件安装 适用于 Win10.win11系统 1.直接安装软件&#xff0c;安装…