概念

什么是日志

  日志是系统运行过程中的后台输出信息,方便程序员进行系统运行的管控以及Bug的查找。

log4j2的概念

  log4j2是一个日志输出的插件,专门用来进行日志的管理。

  Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

  Log4j2是Log4j的升级版。

log4j2的优势

  1. 日志可以单独保存在文件中
  2. 可以获取完整的日志信息
  3. 可以进行日志显示的筛选
  4. 格式友好

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的更多相关文章

  1. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  2. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  3. Spring Cloud微服务学习笔记

    Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...

  4. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  5. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  6. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  7. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  8. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  9. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

随机推荐

  1. 前端笔记之Canvas

    一.Canvas基本使用 Canvas是HTML5的画布,Canvas算是“不务正业”的面向对象大总结,将面向对象玩极致. 算法为王!就是说canvas你不会,但是算法好,不怕写业务,不怕代码量,只要 ...

  2. 基于 websocket 实现的 im 实时通讯案例

    分享利用 redis 订阅与发布特性,巧妙的现实高性能im系统.为表诚意,先贴源码地址:https://github.com/2881099/im 下载源码后的运行方法: 运行环境:.NETCore ...

  3. FreeSql 过滤器使用介绍

    FreeSql.Repository 实现了过滤器,它不仅是查询时过滤,连删除/修改/插入时都会进行验证,避免数据安全问题. 过滤器 目前过滤器依附在仓储层实现,每个仓储实例都有 IDataFilte ...

  4. 补习系列(18)-springboot H2 迷你数据库

    目录 关于 H2 一.H2 用作本地数据库 1. 引入依赖: 2. 配置文件 3. 样例数据 二.H2 用于单元测试 1. 依赖包 2. 测试配置 3. 测试代码 小结 关于 H2 H2 数据库是一个 ...

  5. C++删除文件末尾字符

    C++中使用fstream来进行文件读写,如果要覆盖文件末尾的部分字符,应该怎么操作呢? #include <iostream> #include <fstream> std: ...

  6. 一个经典的 HTTP协议详解

    1引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1 ...

  7. Web前端 css实现元素垂直居中的常用方法

    方法1:table-cell html结构: 1 2 3 <div class="box box1">         <span>垂直居中</spa ...

  8. 21 , CSS 构造模型

    1. div 2. 边距 3. 边框 4. 定位 5. 浮动 1 21.1  div 部分(division)---<div>元素,经常以 div 形式引用---是 XHTML 元素,用于 ...

  9. 泛微oa几个常用的js

    泛微OA,常用JS 为满足一些简单需求,我从网上借鉴了大量的代码,其中几个是非常好用的. (1).取值判断 通过jQuery('#field1234').val()取字段的值,field1234对应字 ...

  10. 一次apk打开时报内存溢出错误,故写下内存溢出的各种原因和解决方法

    原转载:https://blog.csdn.net/cp_panda_5/article/details/79613870 正文内容: 对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么 ...