概念

什么是日志

  日志是系统运行过程中的后台输出信息,方便程序员进行系统运行的管控以及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. CTF丨2019互联网安全城市巡回赛·西安站,我们来了!

    万物互联时代,网信事业发展突飞猛进,互联网悄然渗透到国民生活的每一个角落,伴随而来的网络安全威胁和风险也日渐突出.网络诈骗.钓鱼软件.勒索病毒等安全问题层出不穷,信息泄露等网络安全事件也频繁上演,给用 ...

  2. 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线

    缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...

  3. Mybatis增删改查,Demo整合

    第一步:MyBatis的Jar包引入mybatis-3.2.7.jarmysql-connector-java-5.1.8.jar MyBatis的pom.xml依赖 <dependencies ...

  4. 使用LXD搭建Web网站

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生 发表于云+社区专栏 介绍 Linux的容器是Linux的一组进程,通过使用Linux内核功能与系统隔离.它是一个类似于虚拟 ...

  5. 海康相机SDK二次开发只有视频无声音问题

    海康SDK相信做企业开发的的同仁,在项目中经常会用到,毕竟使用范围这么广. 本次就开发遇到的奇葩问题来说明一下我们的解决方案. 场景 虽然海康有4200客户端,但是对于高度定制化的项目,肯定不能再使用 ...

  6. SQLServer之创建数据库架构

    创建数据库架构注意事项 包含 CREATE SCHEMA AUTHORIZATION 但未指定名称的语句仅允许用于向后兼容性. 该语句未引起错误,但未创建一个架构. CREATE SCHEMA 可以在 ...

  7. cmd wevtutil 读取远程日志错误,Error:在没有配置的 DNS 服务器响应之后,名称 Server23.localdomain 的名称解析超时。

    想要根据xml文件筛选器读取远程主机最新的几条日志,结果老是提示: Error : wevtutil qe SystemQuery.xml /f:text /rd: /sq:true /r:\\*** ...

  8. 单元测试过多,导致The configured user limit (128) on the number of inotify instances has been reached.

    最近在一个asp.net core web项目中使用TDD的方式开发,结果单元测试超过128个之后,在CI中报错了:"The configured user limit (128) on t ...

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

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

  10. SQL 高级查询(层次化查询,递归)

    SQL 高级查询 前面我们写了一下 SQL 的极简入门,今天来说点高级查询.没看到的朋友可以点击下面链接查看. 1 小时 SQL 极速入门(一) 1 小时 SQL 极速入门(二) 1 小时 SQL 极 ...