springboot logback 、log4j2
a. Spring Boot 默认的日志框架 logback
b. 日志配置
b1. application.properties 配置
logging.file 和 logging.path
logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。
如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log
注:二者不能同时使用,如若同时使用,则只有logging.file生效
b2. 自定义日志配置(默认配置文件名)
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties
b3. 自定义日志配置(加载配置文件)
application.properties中添加
logging.config=classpath: xxx.xml
c. logback 配置文件
c1. configuration tag 的三个重要属性:
scan: 当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true.
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当 scan 为 true 时,此属性生效.默认的时间间隔为 1 分钟.
debug: 当此属性设置为 true 时,将console上打印出 logback 内部日志信息,实时查看 logback 运行状态, 但这些logback内部日志不会记录到log文件中. 默认值为 false.
c2. 下面一共有2个属性,3个子节点
上下文名称: <contextName>logback</contextName>
每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。
变量: <property name="log.path" value="E:\\logback.log" />
用来定义变量值的标签,有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。
logback-spring.xml
<?xml version="1.0" encoding="UTF-8" ?><!--
scan: 当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true.
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当 scan 为 true 时,此属性生效.默认的时间间隔为 1 分钟.
debug: 当此属性设置为 true 时,将console上打印出 logback 内部日志信息,实时查看 logback 运行状态, 但这些logback内部日志不会记录到log文件中. 默认值为 false.
-->
<configuration scan="false" scanPeriod="60 seconds" debug="false"><statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /><!-- 彩色日志 --><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN"value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(--%line){gray} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /><property name="FILE_LOG_PATTERN"value="%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %clr(--%line){gray} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" /><!-- 全局参数 --><property name="LOG_HOME" value="/app/logs" /><property name="LOG_NAME" value="/demo_task" /><property name="LOG_PATH" value="${LOG_HOME}${LOG_NAME}" /><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默认配置为class为PatternLayoutEncoder --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%line : %msg%n</pattern></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}${LOG_NAME}_%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><maxHistory>60</maxHistory></rollingPolicy><encoder><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} -%line : %msg%n</Pattern></encoder><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><!--滚动策略 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径 --><FileNamePattern>${LOG_HOME}/error${LOG_NAME}_error.%d{yyyy-MM-dd}.log</FileNamePattern></rollingPolicy><encoder><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %line : %msg%n</Pattern></encoder></appender><appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>WARN</level></filter><!--滚动策略 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径 --><FileNamePattern>${LOG_HOME}/warn${LOG_NAME}_warn.%d{yyyy-MM-dd}.log</FileNamePattern></rollingPolicy><layout class="ch.qos.logback.classic.PatternLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %line : %msg%n</Pattern></layout></appender><logger name="org.mybatis" level="INFO"/><logger name="com.byrc.demo" level="DEBUG" /><root><level value="INFO" /><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /><appender-ref ref="fileWarnLog" /><appender-ref ref="fileErrorLog" /></root></configuration>
注:encoder和Layout:
https://blog.csdn.net/cw_hello1/article/details/51969554
https://yq.aliyun.com/ziliao/433297
- encoder:主要工作有两个:①将一个event事件转换成一组byte数组,②将转换后的字节数据输出到文件中。
- 其中layout仅仅完成了将一个event事件转换成一个字符串这一个功能。此外,layout不能控制将字符串写出到文件。
d. log4j2配置文件
d1. jar 引入
pom.xml
<!-- spring-boot的web启动的jar包 --><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><!-- 如果要加载log的xxx.yml(eg:log4j2.yml)文件,加上这个才能辨认到文件 --><!-- <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>--><!-- 异步日志 --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId></dependency>
d2. Appenders配置(包括异步日志)
官网Appenders配置:http://logging.apache.org/log4j/log4j-2.3/manual/appenders.html
<Async name="Async"><AppenderRef ref="infoLog"/>
</Async>
d3. logger异步日志配置
官网logger异步配置:http://logging.apache.org/log4j/log4j-2.3/manual/async.html#AllAsync
<AsyncLogger name="com.foo.Bar" level="trace" includeLocation="true"><AppenderRef ref="RandomAccessFile"/>
</AsyncLogger>
log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?><!--设置log4j2的自身log级别为warn-->
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<!-- No need to set system property "log4j2.contextSelector" to any valuewhen using <asyncLogger> or <asyncRoot>. -->
<configuration status="warn" monitorInterval="30"><!-- 全局参数 --><Properties><Property name="PID">????</Property><Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property><Property name="LOG_LEVEL_PATTERN">%5p</Property><Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property><Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property><Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property><property name="LOG_HOME" value="/app/logs" /><property name="LOG_NAME" value="/demo_task" /><property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</property><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><property name="pattern2">[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] [%p] %c{1.} -%L : %m%n</property></Properties><Appenders><Console name="Console" target="SYSTEM_OUT" follow="true"><PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" /></Console><!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. --><RollingRandomAccessFile name="RollingRandomAccessFile" fileName="${LOG_HOME}${LOG_NAME}.log"immediateFlush="true" append="false"filePattern="${LOG_HOME}${LOG_NAME}_%d{yyyy-MM-dd}_%i.log.gz"><PatternLayout pattern="${pattern2}"/><Filters><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/></Filters><Policies><!--每滚动24小时,压缩--><TimeBasedTriggeringPolicy modulate="true" interval="24"/><SizeBasedTriggeringPolicy size="50 MB"/></Policies><!--最多可以保存20个文件--><DefaultRolloverStrategy max="20"/></RollingRandomAccessFile></Appenders><Loggers><Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" /><logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/><AsyncLogger name="com.byrc.demo" level="debug" ><AppenderRef ref="RollingRandomAccessFile"/></AsyncLogger><Root level="info"><AppenderRef ref="Console" /><!-- <AppenderRef ref="RollingRandomAccessFile"/>--></Root>
<!-- <asyncRoot level="info"><AppenderRef ref="Console" /><AppenderRef ref="RandomAccessFile"/></asyncRoot>--></Loggers></configuration>
https://logging.apache.org/log4j/2.x/
http://tengj.top/2017/04/05/springboot7/
https://www.cnblogs.com/lixuwu/p/5804793.html
https://yq.aliyun.com/ziliao/433297
springboot logback 、log4j2相关推荐
- java常用日志框架日志门面及实现 SLF4J 、Jboss-logging 、JCL、Log4j、Logback、Log4j2、JUL,springboot集成 log4j、log4j2
java常用日志框架日志门面SLF4J .Jboss-logging .JCL.Log4j及实现 Logback.Log4j2.JUL,springboot集成 log4j.log4j2 .logba ...
- 带你理清 Java 混乱的日志体系 - log4j、logback、log4j2、jcl、SLFJ 究竟是啥关系?
1.JAVA混乱的日志体系 换乱的java日志体系 case: SLF4J-JCL LOG4J-CORE LOGBACK SLF4J-SIMPLE JCL-OVER-SLF4J LOGBACK-COR ...
- Spring Boot(十)Logback和Log4j2集成与日志发展史
一.简介 Java知名的日志有很多,比如:JUL.Log4j.JCL.SLF4J.Logback.Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看. 1.1 ...
- 一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)
文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :<尼恩Java面试宝典>持续更新+ 史上最全 + 面 ...
- spring、springboot集成 log4j日志、log4j2日志以及slf4j
1.查看pringboot自带的日志框架 新建一个springboot 工程,查看依赖树 通过查看依赖树可以发现,springboot自带被loggong管理的log4j .logback等日志相关的 ...
- slf4j、jcl、jul、log4j1、log4j2、logback大总结
2019独角兽企业重金招聘Python工程师标准>>> #1 系列目录# 2种日志接口框架,4种日志实现框架 jdk-logging.log4j.logback日志介绍及原理 jcl ...
- java log4j logback jcl_知识总结-Java日志框架Log4j、Log4j2、logback、slf4j、简介
功能简介 上一篇介绍了为什么打印日志.什么时候打印日志以及怎么打印日志.本篇介绍下在项目开发中常见的日志组件以及关系. 先看一张图 接口:将所有日志实现适配到了一起,用统一的接口调用. 实现:目前主流 ...
- 一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系
前言 之前都是使用SparkStreaming开发,最近打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上.因为Flink从1.7之后就不再提供Had ...
- Skywalking log4j、log4j2、logback tid注入方法
Skywalking tid注入方法 log4j2 pom中引入以下依赖 <dependency><groupId>org.apache.skywalking</grou ...
最新文章
- 2022-2028年中国石油钻井井下工具行业市场研究及前瞻分析报告
- Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)
- Data Mining with Big Data--阅读笔记
- 设计模式之_Iterator_03
- ubuntu下安装jdk1.6.0_41
- 阿里云护航罗振宇2018“时间的朋友”跨年演讲,与千万观众一起跨年 1
- TCP/IP学习笔记-Qt中的ReuseAddressHint以及SO_REUSEADDR,以为组播常用场景分析
- 汇编语言:实现大小写字母转换
- java 串口tcp客户端访问串口tcp服务器_怎么使用无线串口服务器
- 知网查重提交论文显示服务器错误,职称论文在进行知网查重时,经常出现的错误有哪些?...
- SPSS学习资料汇总
- 代码远程调用aria2实现URL资源或BT种子下载
- 数学建模学习心得--建模教程
- java target文件夹_Maven不会创建“/ target / m2e-wtp / web-resources”文件夹
- 几个不错的VC编程学习网站
- Spring Cloud Ribbon 全解 (1) - 总览篇
- Android studio emulator 无法打开的解决办法
- Fcoin平台每天赠送了好多币如何处理呢?
- 基于wxpy的微信防撤回
- “两地分居”的大学师生