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

  1. encoder:主要工作有两个:①将一个event事件转换成一组byte数组,②将转换后的字节数据输出到文件中。
  2. 其中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 value
     when 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值