Log4j2

PS: Log4j 已不再维护,而最新的是Log4j2, Log4j2 是全部重写了Log4j,并拥有更加优秀的性能

1. 引入依赖,和去掉logging的依赖

		<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency> <!-- log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 在resources 下增加文件log4j2.xml,默认会读取这个命名的文件(名字也可以改,但没啥意义,默认就行)

Log4j2.xml 解释版

<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="60">
<Properties>
<!-- 配置日志文件输出目录 -->
<Property name="LOG_HOME">./logs</Property> <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<!-- <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />--> <!-- 这个多打印出了日期,执行的函数名及行号 -->
<property name="LOG_PATTERN" value="%d|%t|%X{uid}|%-5level|%c.%M:%L|%m%n" />
</Properties> <Appenders> <!-- 控制台输出配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<!--输出日志的格式-->
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console> <!-- FileAppender。servlet容器中的两个web应用程序
可以拥有它们各自的配置,如果Log4j2位于它们共同使用
的类加载器中,则可以安全地将日志写入同一个文件。默认
启用bufferedIO以及immediateFlush(前者提高性能,后
者可以保证写入,缓冲区没满也写入!每次写操作都会调
用flush,不过有点影响性能),如果是异步Logger,即便
immediateFlush设置为false,异步Logger和appender也
将在一批事件结束时自动flush,这样做比较高效同时
保证了数据写入磁盘 -->
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<File name="Debug" fileName="${LOG_HOME}/debug.log" append="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File> <!-- 似乎可以看作是FileAppender的进化版,实现上不大
一样,根据报导,相比启用了bufferedIO的FileAppender
性能提高了20-200%(RandomAccessFile没有bufferedIO
这个选项,因为它总是buffered的!) -->
<RollingRandomAccessFile name="Error" immediateFlush="true" bufferSize="4096" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 这个的默认是一小时触发一次 -->
<TimeBasedTriggeringPolicy/>
<DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="error.log.*.gz"/>
<IfLastModified age="30d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile> <RollingRandomAccessFile name="System" immediateFlush="true" bufferSize="4096"
fileName="${LOG_HOME}/system.log"
filePattern="${LOG_HOME}/system.log.%d{yyyy-MM-dd}.gz"
ignoreExceptions="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Filters>
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 表示两天触发一次策略 -->
<Policies>
<CronTriggeringPolicy schedule="0 0 2 * * ?" evaluateOnStartup="true"/>
</Policies> <DefaultRolloverStrategy>
<Delete basePath="${LOG_HOME}" maxDepth="2" followLinks="true">
<IfFileName glob="system.log.*.gz"/>
<IfLastModified age="7d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile> </Appenders> <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
<!-- 定义logger,只有定义了logger 并引入appender,appender才会生效 -->
<Loggers>
<!--若是additivity设为false,则子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<!--过滤掉mybatis的一些无用的DEBUG信息-->
<Logger name="org.mybatis" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger> <!--过滤掉spring的一些无用的DEBUG信息-->
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger> <Logger name="org.hibernate.validator" level="info" additivity="false">
<AppenderRef ref="Console"/>
</Logger> <!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- 建立一个默认的root的logger -->
<Root level="trace" includeLocation="true">
<AppenderRef ref="Console"/>
<AppenderRef ref="Error" />
<AppenderRef ref="System" />
<AppenderRef ref="Debug" />
</Root>
</Loggers>
</Configuration>

Springboot log4j2总结的更多相关文章

  1. SpringBoot + Log4j2使用配置 (转)

    前言 后台程序开发及上线时,一般都会用到Log信息打印及Log日志记录,开发时通过Log信息打印可以快速的定位问题所在,帮助我们快捷开发.程序上线后如遇到Bug或错误,此时则需要日志记录来查找发现问题 ...

  2. SpringBoot log4j2 异常

    log4j 配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  3. Spring Boot Log4j2 日志学习

    简介 Java 中比较常用的日志工具类,有: Log4j. SLF4j. Commons-logging(简称jcl). Logback. Log4j2(Log4j 升级版). Jdk Logging ...

  4. 日志套餐篇 - log4j2 logback全量套餐

    日志套餐篇 - log4j2 logback全量套餐 前情提要: Log4j Log4j2 logback是当下主流的日志框架 slf4j则是新一代的日志框架接口,logback直接实现了slf4j接 ...

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

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

  6. springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback

    springboot打包时,去掉资源文件 <build> <resources> <resource> <directory>src/main/reso ...

  7. Springboot整合log4j2日志全解

    目录 常用日志框架 日志门面slf4j 为什么选用log4j2 整合步骤 引入Jar包 配置文件 配置文件模版 配置参数简介 Log4j2配置详解 简单使用 使用lombok工具简化创建Logger类 ...

  8. SpringBoot添加对Log4j2的支持

    1.在添加对Log4j2的支持前,需要先把SpringBoot默认使用的Logback日志框架排除,修改pom.xml文件: <dependency> <groupId>org ...

  9. springboot logback + log4j2日志管理

    springboot的web项目中自带了日志组件: 我们看一下,springboot中找到日志组件. <dependency> <groupId>org.springframe ...

随机推荐

  1. go Cobra命令行工具入门

    简介 Github:https://github.com/spf13/cobra Star:26.5K   Cobra是一个用Go语言实现的命令行工具.并且现在正在被很多项目使用,例如:Kuberne ...

  2. 搭建uipath

    我对windows也不太熟,也是第一次安装Uipath Orchestrator,希望有问题指出一起交流,可以留言,Uipath中文qq交流群:4656303241. 下载镜像 windows ser ...

  3. 【python基础】第02回 计算机基础2

    上节内容回顾 1.绝对路径与相对路径 1.路径的概念 用来标识资源的位置 2.绝对路径 类似于全球GPS定位(给到任何人都可以顺利的找到相应的资源) eg: D:\aaa\a.txt 3.相对路径 需 ...

  4. Python-基础知识汇集

    1.列表 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可 代码理解:列表 ...

  5. 从UI Designer上面动态创建下拉列表

    在UI Desigher上创建一个新的列表 并创建2个值,code 和value 添加一个EventHandler 在EventHandler上面添加一个Operation 类型为script$dat ...

  6. NC14301 K-th Number

    NC14301 K-th Number 题目 题目描述 Alice are given an array A[1..N] with N numbers. Now Alice want to build ...

  7. Thread和Runnable的区别和匿名内部类方式实现线程的创建

    如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享. 总结:实现Runnable接口比继承Thread类所具有的优势: 1.适合多个相同的程序代 ...

  8. C语言整形转字符串的方法

    今天写力扣第九题,里面用到了这个,就做个笔记.   1. char *itoa( int value, char *string,int radix);(stdlib.h)     Windows特有 ...

  9. @RequestBody,@RequestParam是否能随意改变入参字母大小写

    在工作中遇到了一个问题,很多接口有的入参是companyName,有的入参是companyname,实际上,这两入参能任意适配所有接口,甚至随意改变大小写! 1. @RequestBody是完全按照驼 ...

  10. 螣龙安科反入侵:EDR的缺点

    EDR解决方案提供了比传统终结点安全解决方案更高的功能,并且可以增加人员数量,但是这些功能都有不少的缺点. EDR功能付出巨大代价 在过去四年中,虽然产品成本平均每年下降约35%,但即使到今天,产品的 ...