学习笔记—log4j2
概念
什么是日志
日志是系统运行过程中的后台输出信息,方便程序员进行系统运行的管控以及Bug的查找。
log4j2的概念
log4j2是一个日志输出的插件,专门用来进行日志的管理。
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
Log4j2是Log4j的升级版。
log4j2的优势
- 日志可以单独保存在文件中
- 可以获取完整的日志信息
- 可以进行日志显示的筛选
- 格式友好
log4j2的使用流程
导入log4j2的jar包
1、下载压缩包(下载地址:https://logging.apache.org/log4j/2.x/download.html)
2、解压压缩包,并向项目导入两个jar包

3、将jar包添加到配置环境中

配置log4j2的配置文件
1.配置文件名称及存放路径。
log4j 2.x版本不再支持.properties后缀的文件配置方式。2.x版本的配置文件后缀只能是“.xml”,".json"或者“.jsn”。
log4j2的配置文件必须放置在classpath(src文件夹)下。
系统选择配置文件的优先级(从前到后):
- log4j2-test.json 或者log4j2-test.jsn文件
- log4j2-test.xml 文件
- log4j2.json 或者 log4j2.jsn 文件
- log4j2.xml 文件
2.配置文件内容
(1)根节点 Configuration 有两个属性:status、monitorinterval,有两个子节点:Appenders(输出端)、Loggers(日志记录器)。
status:用来指定log4j本身的级别。
monitorinterval:用来指定自动重新读取配置文件的间隔时间,单位是s。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Appenders> </Appenders>
<Loggers> </Loggers>
</Configuration>
(2) Appenders节点(输出端),用来指定日志输出到那个位置,常见的有三种子节点 Console、RollingFile、File
Console节点 将日志输出到控制台
属性:name:取名字。
target:SYSTEM_OUT 或 SYSTEM_ERR 表示输出到控制台
节点:PatternLayout:输出格式,不设置默认为:%m%n
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
File节点 将日志输出到文件
属性:name:取名字。
fileName:指定输出日志的接收文件。
append:false或true。表示是否追加
节点:PatternLayout:输出格式,不设置默认为:%m%n
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
RollingFile节点 将日志输出到文件,并指定文件大小,如果超过文件大小,则自动将文件改名,并产生新的日志文件
属性:name:取名字。
fileName:指定输出日志的接收文件
filePattern:当文件达到最大时,指定新建日志的名称格式
节点:ThresholdFilter:指定输出级别
PatternLayout:输出格式,不设置默认为:%m%n
Policies:
SizeBasedTriggeringPolicy 指定当文件体积大于size指定的值时,触发Rolling
TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用,interval属性用来指定多久滚动一次
DefaultRolloverStrategy 指定最多保存的文件个数
<RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
(3) Loggers节点(日志记录器)控制日志的输出级别与日志是否输出,只有定义了logger并引入的appender,appender才会生效。
logger节点 单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
属性:name:指定logger所适用的类
level:指定日志等级
节点:AppenderRef:用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
root节点:用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
<Loggers>
<Logger name="com.shangyang" level="DEBUG"/>
<Root level="ERROR">
<AppenderRef ref="STDOUT">
</Root>
</Loggers>
3.log4j2的日志级别(从低到高)
All:最低级别,打开所有日志记录
Trace:只要程序运行过程,即只要程序运行一条命令,即可输出一条日志
Debug:调试(代码级别)
Info:信息(方法级别)
Warn:警告
Error:异常错误,但不影响程序的继续运行
Fatal:致命的错误,将会导致程序退出
OFF:最高级别,关闭所有日志
注意:一般只使用5个级别,优先级从低到高为:Debug < Info < Warn < Error < Fatal
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。
4.Layout(格式转换器)
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Client.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
在使用log4j2的类中声明全局的Logger对象
调用LogManager类的 getLogger() 方法
private static Logger logger = LogManager.getLogger(类名.class);
使用logger对象调用日志方法进行日志输出语句声明
logger.trace("我是trace信息");
logger.debug("我是debug信息");
logger.info("我是info信息");
logger.warn("我是warn信息");
logger.error("我是error信息");
logger.fatal("我是fatal信息");
实例
java代码
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; public class TestLog {
public static void main(String[] args) {
Hello hello = new Hello();
Hi hi = new Hi();
hello.getHello();
hi.getHi();
}
} class Hello {
private static Logger logger = LogManager.getLogger(Hello.class.getName());
public void getHello() {
logger.trace("我是trace信息");
logger.debug("我是debug信息");
logger.info("我是info信息");
logger.warn("我是warn信息");
logger.error("我是error信息");
logger.fatal("我是fatal信息");
}
} class Hi {
private static Logger logger = LogManager.getLogger(Hi.class);
public void getHi() {
logger.trace("我是trace信息");
logger.debug("我是debug信息");
logger.info("我是info信息");
logger.warn("我是warn信息");
logger.error("我是error信息");
logger.fatal("我是fatal信息");
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
</appenders>
<loggers>
<logger name="com.shangyang.test.Hello" level="info">
</logger>
<root level="error">
<appender-ref ref="Console"/>
<appender-ref ref="log"/>
</root>
</loggers>
</configuration>
控制台显示

日志文件显示

学习笔记—log4j2的更多相关文章
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- Spring Cloud微服务学习笔记
Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
随机推荐
- CentOS 本地和网络yum源简单说明及配置
1.简述 Yellow dog Updater, Modified由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于R ...
- 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(二)
前一节已经完成了Oracle数据库和ODI的安装,并已经为ODI在Oracle数据库中创建了两个用户,分别用于存放主资料库数据和工作资料库数据,在ODI中完成主资料库和工作资料库的创建,也分别为其创建 ...
- 微服务(入门一):netcore安装部署consul
环境准备 vs开发环境:vs2017 consul版本: 1.4.4 netcore版本:2.1 安裝Consul 1.从官网下载consul到本地,选择系统对应的版本进行下载到本地,下载地址:h ...
- Django-restframework 之认证源码分析
Django-restframework 源码分析之认证 前言 最近学习了 django 的一个 restframework 框架,对于里面的执行流程产生了兴趣,经过昨天一晚上初步搞清楚了执行流程(部 ...
- C# 错误:空对象不能转换为值类型
最近在做项目的时候出现了一个错误 当从数据库中获取值的时候 报错:空对象不能转换为值类型 因为数据库你查询数据的时候不是所有的字段都是存在数据的,有些字段可能是Null值,也就是没有数据 当你在类型转 ...
- DevExpress控件安装破解和汉化使用教程
这段时间因公司业务需要.net开发且需要用到DevExpress控件,我自己研究学习了一下,用的是visual studio(2013)和DevExpress(V14.1.4),VS2013的下载安装 ...
- java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10458448.html 今天在做APP的时候使用so库,可结果一加载so库的时候便发生了这个莫名其妙的错 ...
- 记一次DDOS攻击防御实录
前言 笔者所在单位是一家小型创业公司,目前产品正在成长阶段,日活跃用户只有区区几万人次,并发只有日均 85/QPS,自建机房,带宽 100MB.在这样的背景下,完全没想过一个小产品会招来黑客的 ...
- 1. [mmc subsystem] 概念与框架
一.概念 1.mmc的概念 mmc有很多种意义,具体如下: mmc MultiMedia Card,多媒体存储卡, 但后续泛指一个接口协定(一种卡式),能符合这接口的内存器都可称作mmc储存体. 主要 ...
- Windows Server 2016-三种方法备份还原DHCP服务器
方法一:图形化备份还原DHCP: 备份操作: 1.DHCP控制台,属性选择"备份"选项: 2.指定备份路径,默认是C:\Windows\System32\dhcp\ 3.备份完成后 ...