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);@Testpublic 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);@Testpublic 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.hqwc.cn/news/478639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Arthas》--问题定位神器--常用指令一图全知

阿丹&#xff1a; 因为一个图太大&#xff0c;直接放出来影响观看&#xff0c;我给他们分开来。 图中关键标识&#xff1a; 基础命令&#xff1a; class相关 jvm相关 字节码增强 ArtHas 基础命令 help 查看命令帮助信息 cls 清空当前屏幕区域 session 查看当前会话的信息 …

vulhub中Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)

Apache Log4j是一个用于Java的日志记录库&#xff0c;其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 1.我们使用ysoserial生成payload&#xff0c;然后直接发送给your-ip:4712端口即可。 java -jar ysoserial-…

【FastAPI】P3 请求与响应

目录 请求路径参数查询参数 响应JSON 响应文本响应返回 Pydantic 模型 在网络通讯中&#xff0c;请求&#xff08;Request&#xff09; 与 响应&#xff08;Response&#xff09; 扮演着至关重要的角色&#xff0c;它们构成了客户端与服务器间互动的根本理念。 请求&#xff0…

数据结构day1

定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h> #include &l…

Bert基础(一)--transformer概览

1、简介 当下最先进的深度学习架构之一&#xff0c;Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrent neural network, RNN)和长短期记忆(long short-term memory, LSTM)网络&#xff0c;并且以它为基础衍生出了诸如BERT、GPT-3、T5等…

请求数据是写在组件的methods中还是在vuex的action中?

作为一名Web前端开发者&#xff0c;我们经常面临一个重要决策&#xff1a;将请求数据写在组件的methods中还是在Vuex的action中。这个问题涉及到了组件的数据流管理和代码结构的设计&#xff0c;不同的方案对于项目的可维护性和扩展性都有着不同的影响。 首先&#xff0c;让我…

普通人如何开启真正的赚钱之路

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

【PHP】web服务器支持PHP_环境配置

一、PHP运行目前为止主要有4方式 &#xff08;1&#xff09;以模块加载的方式运行&#xff0c;初学者可能不容易理解&#xff0c;其实就是将PHP集成到Apache服务器&#xff0c; 以同一个进程运行。 &#xff08;2&#xff09;以CGI的方式运行&#xff0c;CGI英文叫…

Maven(基础)、MyBatis

简介 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型 (POM)的概念&#xff0c;通过一小段描述信息来管理项目的构建、报告和文档 官网: http://maven.apache.org/ Maven作用 Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#x…

ChatGPT在数据分析岗位了解阶段的应用

ChatGPT在数据分析岗位了解阶段的应用 ​ 1.1 数据分析师的职责与技能要求 ​ 如果想成为数据分析师&#xff0c;首先要了解这个岗位的具体职责和技能要求。这个问题可以直接询问ChatGPT&#xff1a; ​ ChatGPT收到上述内容后&#xff0c;返回如下结果。 ​ ChatGPT给出的信…

漫漫数学之旅027

文章目录 经典格言数学习题古今评注名人小传 - 约翰弥尔顿 经典格言 机会统治一切。——约翰弥尔顿&#xff08;John Milton&#xff09; 约翰弥尔顿&#xff0c;这位伟大的英国诗人曾掷地有声地说出&#xff1a;“机会统治一切。”这句话如果放在一场宇宙级的脱口秀中&#x…

基于Java SSM框架实现疫情防控系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现疫情防控系统演示 Java技术 Java技术它是一个容易让人学会和使用的一门服务器语言。它在编程的过程当中只需要很少的知识就能建立起一个真正的交互站点。对于这个教程来说它并不需要你完全去了解这种语言&#xff0c;只要能快速融入web站点就可以&#x…