Log4j2 使用教程

Log4j2 的好处就不在这里一一列举了,如果你搜了2,说明你对它一定有兴趣,并且想了解它,使用它。

一、下载log4j2 ,基本上你只需要导入下面两个jar包即可:

  1. log4j-api-2.11.0.jar
  2. log4j-core-2.11.0.jar

二、导入到你的项目中(Maven --> pom.xml):

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.0</version>
  </dependency>
</dependencies>

三、成员变量:

我们知道,要在某个类中使用log4j记录日志,只需要声明以下的成员变量

private static Logger logger = LogManager.getLogger(Hello.class.getName());

1. 这里getLogger有一个参数指定的是这个logger的名称,这个名称在配置文件里面可是需要的。

2. 声明了Logger对象,我们就可以在代码中使用它了。

四、日志调用:

这里写一个Hello类,调用很简单,log4j的核心在配置文件上。

package com.ray.test;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * Created by Ray on 2018/3/28 0028.
 **/
public class Hello {

    private static Logger logger = LogManager.getLogger(Hello.class.getName());

    public static void main(String[] args) {
        logger.trace("entry"); //开始时调用
        logger.error("Did it again!"); //error级别的信息
        logger.info("我是info信息"); //info级别的信息
        logger.debug("我是debug信息"); //debug级别的信息
        logger.warn("我是warn信息"); //warn级别的信息
        logger.fatal("我是fatal信息"); //fatal级别的信息
        logger.log(Level.DEBUG,"我是debug信息"); //指定Level类型的调用
        logger.trace("exit"); //结束时调用
    }
}

如果没有自定义配置文件,Hello这个类调用main方法,在控制台会输出下面的结果:

默认情况下,只有 >= ERROR 的日志才会输出到控制台(这是因为Log4j有一个默认的配置,它的日志级别是ERRROR,输出只有控制台),下面是我在官网Configuration找来的默认配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

现在我们按照官方配置文件的格式,创建自己的定义的日志文件,并且把日志级别改成TRACE:

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!--控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <!-- 只让这个Logger输出trace信息,其他都是error级别 -->
        <Logger name="com.ray.test.Hello" level="trace" additivity="false">
            <Appender-ref ref="Console"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

此时有自定义配置文件,Hello这个类调用main方法,在控制台会输出下面的结果:

所有的日志都打印出来了,大家可以对照上面的代码看一看。

复杂点的配置:

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Configuration有两个属性,分别是status 和 monitorInterval
    status:用于设置log4j2自身内部的信息输出
    monitorInterval:自动检测修改配置文件和重新配置本身,设置间隔秒
-->
<Configuration status="WARN" monitorInterval="30">
    <!-- 先定义所有的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 %logger{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} %L %M - %msg%xEx%n"/>
        </File>

        <!-- 这个会打印出所有的信息,每次大小不超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下并进行压缩,作为存档-->
        <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %logger{36} %L %M -%msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size = "50MB"/>
            <!--若不设置,默认一个文件夹最多7个文件,这里设置了20-->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- 建立一个默认的root的logger -->
        <root level="trace">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </root>
    </Loggers>
</Configuration>
  1. ConsoleAppender:输出结果到System.out或是System.err。
  2. FileAppender:输出结果到指定文件,同时可以指定输出数据的格式。append=“false”指定不追加到文件末尾
  3. RollingFileAppender:自动追加日志信息到文件中,直至文件达到预定的大小,然后自动重新生成另外一个文件来记录之后的日志。
  4. Console节点中的PatternLayout定义了输出日志时的格式:

    %d{HH:mm:ss.SSS} 表示输出到毫秒的时间

    %t 输出当前线程名称

    %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

    %logger 输出logger名称,因为Root Logger没有名称,所以没有输出

    %msg 日志文本

    %n 换行

    其他常用的占位符有:

    %F 输出所在的类文件名,如Client.java

    %L 输出行号

    %M 输出所在方法名

    %l  输出语句所在的行数, 包括类名、方法名、文件名、行数


输出结果:

Log4j2 HelloWorld的更多相关文章

  1. log4j2 使用说明

    因近期需要编写J2EE程序,所以简单学习了Log4j2,这里把我学习的一些信息做记录: 1.从HelloWorld开始 参考:http://logging.apache.org/log4j/2.x/m ...

  2. Log4J2基本配置

    [1]. Log4J2入门: <1>. 导入Jar包: log4j-api-2.0-beta9.jar log4j-core-2.0-beta9.jar <2>. 编写代码: ...

  3. SpringBoot系列一(入门,ORM,Transaction,log4j2等)

    今天写篇springboot的博客,主要介绍一下springboot搭建以及一些整合. 首先介绍springboot搭建,我今天选择Maven,想用Gradle搭建的就自己百度一下吧,访问" ...

  4. Log4j2中RollingFile的文件滚动更新机制

    一.什么是RollingFile RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender. rollover的意思是当满足一定条件( ...

  5. Log4j 2.0 使用说明(1) 之HelloWorld

    以下是Log4j2.0的类图,以便大家对2.0有一个整体的理解. 就如我们学习任何一个技术一样,这里我们首先写一个Hello World: 1,新建工程TestLog4j 2,下载Log4j 2.0有 ...

  6. storm(3)-本机模式-helloworld

    pom.xml <dependency> <groupId>org.apache.storm</groupId> <artifactId>storm-c ...

  7. Ant-编译构建(2)-第3方jar包引入、log4j2

    1.项目目录结构图,lib包引入了一些关于common logging+log4j2相关的jar. 2.编写相关的build.xml <?xml version="1.0" ...

  8. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  9. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...

随机推荐

  1. __x__(42)0910第六天__表格布局 老旧的布局方法

    table 布局 不易于维护,耦合太严重了. 不利于搜索引擎检索. 效果图: html代码: <!doctype html> <html> <head> <m ...

  2. ECMA Script 6_简单介绍

    ECMAScript 6 ECMA 组织 前身是 欧洲计算机制造商协会 指定和发布脚本语言规范,标准在每年的 6 月份正式发布一次,作为当年的正式版本 这样一来,就不需要以前的版本号了,只要用年份标记 ...

  3. laravel5.5 任务调度 (转载)

    Ubuntu和Mac环境中,我们可以使用crontab来控制计划任务 1. 定义调度 我们需要在 App\Console\Kernel 类的 schedule 方法中定义所有任务调度.例如: 上图中定 ...

  4. jsp模板继承

    jsp通过自定义标签实现类似模板继承的效果 关于标签的定义.注册.使用在上面文章均以一个自定义时间的标签体现,如有不清楚自定义标签流程的话请参考这篇文章 http://www.cnblogs.com/ ...

  5. Nginx+Https自己敲命令生成证书

    nginx配置https访问 一.准备 环境:centos6.8 nginx:1.13.6 二.开始       首先安装依赖包: yum install -y gcc gcc-c++ autocon ...

  6. python语法_深浅拷贝

    浅拷贝,.copy 只拷贝第一层(可用于建立银行共享账号). s1 = [‘a’,'b','c'] s2 = s1.copy() s2[0]='d' print(s2) print(s1) 此时修改s ...

  7. 使用ElasticSearch全文检索以及集群部署

    ElasticSearch  即 ES 安装:版本---elasticsearch-2.4.6.tar.gz tar -zxvf elasticsearch-2.4.6.tar.gz 由于es不允许使 ...

  8. Head First Python-Python中与文件相关的操作-读、处理、写

    最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...

  9. java 各种数据类型的互相转换

    StringBuilder转化为String StringBuilder stb = new StringBuilder(); String str=stb.toString(); //方法1 Str ...

  10. 使用STS创建springboot项目pom.xml文件报错org.apache.maven.archiver.MavenArchiver.getManifest

    首先我的STS版本时:3.7.3 解决办法:->help->Install New Software -> add->location ->输入: http://repo ...