概念

什么是日志

  日志是系统运行过程中的后台输出信息,方便程序员进行系统运行的管控以及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. 并发的核心:CAS 与synchronized, Java8是如何优化 CAS 的?

    大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理. 今天就带大家读懂 CAS 是如何保证操作的原 ...

  2. linux根目录下的各文件夹含义说明

    在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱. Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范, 推出 FHS ( F ...

  3. 深入学习Redis(4):哨兵

    前言 在 深入学习Redis(3):主从复制 中曾提到,Redis主从复制的作用有数据热备.负载均衡.故障恢复等:但主从复制存在的一个问题是故障恢复无法自动化.本文将要介绍的哨兵,它基于Redis主从 ...

  4. 目标检测之YOLO V2 V3

    YOLO V2 YOLO V2是在YOLO的基础上,融合了其他一些网络结构的特性(比如:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等),进行的升级.其目的 ...

  5. solr的认识、linux下安装、java下使用(含下载资源)

    目录 一.solr的大概认识 二.solr安装 三.solr的深度认识 四.solr的使用 (1)由于我们用到中文,所以需要中文分析器,这里我用IK Analyzer 2012FF_hf1 (2)同时 ...

  6. android消息处理源码分析

    一.简介消息处理机制主要涉及到这几个类:1.Looper2.MessageQueue3.Message4.Handler 二.源码分析 Looper.class的关键源码: //保存Looper对象, ...

  7. Flink源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...

  8. js 计算器转摘

    转自:https://mp.weixin.qq.com/s/Jxe3V7D0PFLvIFNZPlSyNg <table> <tr> <td colspan="4 ...

  9. xshell6 评估期已过 解决办法

    xshell6 评估期已过,因为我下载的版本是evaluation版本,是有期限的.大家可以修改为Home and school use 的版本,这样就不会出现这个提示了.具体的操作步骤如下: 1.前 ...

  10. 解决Ajax请求时无法重定向的问题

    今天发现,当使用Ajax请求时,如果后台进行重定向到其他页面时是无法成功的,只能在浏览器地址栏输入才能够实现重定向. Ajax默认就是不支持重定向的,它是局部刷新,不重新加载页面. 需要实现的功能是, ...