SpringBoot 切换日志

1,切换成log4j

①,排除logback的包

②,排除转换包log4j-to-slf4j

③,引入slf4j-log4j12

④,官方说明

⑤,最终pom.xml 如下

1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <exclusions> 5 <exclusion> 6 <groupId>ch.qos.logback</groupId> 7 <artifactId>logback-classic</artifactId> 8 </exclusion> 9 <exclusion> 10 <groupId>org.apache.logging.log4j</groupId> 11 <artifactId>log4j-to-slf4j</artifactId> 12 </exclusion> 13 </exclusions> 14 </dependency> 15 <dependency> 16 <groupId>org.slf4j</groupId> 17 <artifactId>slf4j-log4j12</artifactId> 18 </dependency>

⑥,虽然可以切换成log4j,但 不建议这么做,就是因为log4j有性能问题,才出来log4j2和logback。默认的logback已经能满足我们很多场景了。

⑦,log4j.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 3 4<log4j:configuration> 5 6 <!-- 将日志信息输出到控制台 --> 7 <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> 8 <!-- 设置日志输出的样式 --> 9 <layout class="org.apache.log4j.PatternLayout"> 10 <!-- 设置日志输出的格式 --> 11 <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> 12 </layout> 13 <!--过滤器设置输出的级别--> 14 <filter class="org.apache.log4j.varia.LevelRangeFilter"> 15 <!-- 设置日志输出的最小级别 --> 16 <param name="levelMin" value="WARN" /> 17 <!-- 设置日志输出的最大级别 --> 18 <param name="levelMax" value="ERROR" /> 19 <!-- 设置日志输出的xxx,默认是false --> 20 <param name="AcceptOnMatch" value="true" /> 21 </filter> 22 </appender> 23 24 <!-- 将日志信息输出到文件,但是当文件的大小达到某个阈值的时候,日志文件会自动回滚 --> 25 <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"> 26 <!-- 设置日志信息输出文件全路径名 --> 27 <param name="File" value="D:/log4j/RollingFileAppender.log" /> 28 <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 --> 29 <param name="Append" value="true" /> 30 <!-- 设置保存备份回滚日志的最大个数 --> 31 <param name="MaxBackupIndex" value="10" /> 32 <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KBMBGB,默认单位是KB --> 33 <param name="MaxFileSize" value="10KB" /> 34 <!-- 设置日志输出的样式 --> 35 <layout class="org.apache.log4j.PatternLayout"> 36 <!-- 设置日志输出的格式 --> 37 <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> 38 </layout> 39 </appender> 40 41 <!-- 将日志信息输出到文件,可以配置多久产生一个新的日志信息文件 --> 42 <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"> 43 <!-- 设置日志信息输出文件全路径名 --> 44 <param name="File" value="D:/log4j/DailyRollingFileAppender.log" /> 45 <!-- 设置日志每分钟回滚一次,即产生一个新的日志文件 --> 46 <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /> 47 <!-- 设置日志输出的样式 --> 48 <layout class="org.apache.log4j.PatternLayout"> 49 <!-- 设置日志输出的格式 --> 50 <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> 51 </layout> 52 </appender> 53 54 55 56 <!-- 根logger的设置--> 57 <root> 58 <level value ="INFO"/> 59 <appender-ref ref="ConsoleAppender"/> 60 <appender-ref ref="DailyRollingFileAppender"/> 61 </root> 62 63</log4j:configuration>

2,切换成log4j2

log4j2的切换跟切换log4j是不同的,SpringBoot提供了log4j2的starter

①,排除spring-boot-starter-logging

②,引入spring-boot-starter-log4j2

③,pom.xml

1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <exclusions> 5 <exclusion> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-logging</artifactId> 8 </exclusion> 9 </exclusions> 10 </dependency> 11 12 <dependency> 13 <groupId>org.springframework.boot</groupId> 14 <artifactId>spring-boot-starter-log4j2</artifactId> 15 </dependency>

 ④,log4j2.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<configuration status="error"> 3<!-- 先定义所有的appender --> 4 <appenders> 5<!-- 这个输出控制台的配置 --> 6 <Console name="Console" target="SYSTEM_OUT"> 7<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --> 8 <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> 9<!-- 这个都知道是输出日志的格式 --> 10 <PatternLayout pattern="%d{HH:mm:ss.SSS} log4j22xiaosu2 %-5level %class{36} %L %M - %msg%xEx%n"/> 11 </Console> 12 <RollingFile name="RollingFile" fileName="logs/web.log" 13 filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"> 14 <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> 15 <SizeBasedTriggeringPolicy size="2MB"/> 16 </RollingFile> 17 </appenders> 18 19<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 --> 20 <loggers> 21<!-- 建立一个默认的root的logger --> 22 <root level="info"> 23 <appender-ref ref="Console"/> 24 <appender-ref ref="RollingFile"/> 25 </root> 26 27 </loggers> 28</configuration>

3,彩蛋

①,logback-spring.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<configuration scan="true" scanPeriod="60 seconds" debug="false"> 3 4 <property name="LOG_HOME" value="${user.dir}/logs/webflux"/> 5 <property name="ENCODER_PATTERN" 6 value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{80} - %msg%n"/> 7 8 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 9 <layout class="ch.qos.logback.classic.PatternLayout"> 10 <pattern>${ENCODER_PATTERN}</pattern> 11 </layout> 12 </appender> 13 14 <!-- 访问日志 --> 15 <appender name="COMMON_ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender"> 16 <file>${LOG_HOME}/common-access.log</file> 17 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 18 <fileNamePattern>${LOG_HOME}/history/common-access-%d{yyyyMMdd}.log</fileNamePattern> 19 <maxHistory>7</maxHistory> 20 </rollingPolicy> 21 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 22 <pattern>${ENCODER_PATTERN}</pattern> 23 </encoder> 24 </appender> 25 26 27 28 <!-- 系统INFO日志 --> 29 <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 30 <file>${LOG_HOME}/info.log</file> 31 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 32 <fileNamePattern>${LOG_HOME}/history/info-%d{yyyyMMdd}.log</fileNamePattern> 33 <maxHistory>7</maxHistory> 34 </rollingPolicy> 35 <encoder charset="UTF-8"> 36 <pattern>${ENCODER_PATTERN}</pattern> 37 </encoder> 38 </appender> 39 40 <!-- 系统ERROR日志 --> 41 <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 42 <file>${LOG_HOME}/error.log</file> 43 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 44 <fileNamePattern>${LOG_HOME}/history/error-%d{yyyyMMdd}.log</fileNamePattern> 45 <maxHistory>7</maxHistory> 46 </rollingPolicy> 47 <encoder charset="UTF-8"> 48 <pattern>${ENCODER_PATTERN}</pattern> 49 </encoder> 50 </appender> 51 52 <appender name="ASYNC_LOG" class="ch.qos.logback.classic.AsyncAppender"> 53 <discardingThreshold>0</discardingThreshold> 54 <queueSize>1234</queueSize> 55 <appender-ref ref="INFO_LOG"/> 56 </appender> 57 58 <logger name="asyncLog" level="INFO" additivity="false"> 59 <appender-ref ref="ASYNC_LOG"/> 60 </logger> 61 62 63 <logger name="errorLog" level="ERROR" additivity="false"> 64 <appender-ref ref="ERROR_LOG"/> 65 </logger> 66 67 <logger name="commonAccess" level="INFO" additivity="false"> 68 <appender-ref ref="COMMON_ACCESS"/> 69 </logger> 70 71 72 73 74 75 <root level="INFO"> 76 <appender-ref ref="STDOUT"/> 77 <appender-ref ref="INFO_LOG"/> 78 <appender-ref ref="ERROR_LOG"/> 79 </root> 80 81</configuration>

提供logstach收集的日志配置

1<?xml version="1.0" encoding="UTF-8"?> 2<configuration debug="false"> 3 <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> 4 <property name="PROJECT_NAME" value="ad-etl"/> 5 <!-- 项目名称 --> 6 <property name="LOG_HOME" value="./logs"/> 7 <property name="ELK_LOG_HOME" value="/opt/alibaba/elk_logs/${PROJECT_NAME}"/> 8 9 <!-- 彩色日志 --> 10 <!-- 彩色日志依赖的渲染类 --> 11 <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> 12 <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> 13 <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> 14 <!-- 彩色日志格式 --> 15 <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.25t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> 16 17 <!-- 控制台输出 --> 18 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 19 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 20 <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> 21<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>--> 22 <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> 23 <!-- 设置字符集 --> 24 <charset>UTF-8</charset> 25 </encoder> 26 </appender> 27 28 <!-- 按照每天生成日志文件 --> 29 <appender name="DEBUG_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 30 <file>${LOG_HOME}/${PROJECT_NAME}/debug.log</file> 31 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 32 <!--日志文件输出的文件名--> 33 <fileNamePattern>${LOG_HOME}/${PROJECT_NAME}/debug.log.%d{yyyy-MM-dd}.log</fileNamePattern> 34 <!--日志文件保留天数--> 35 <maxHistory>10</maxHistory> 36 </rollingPolicy> 37 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 38 <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> 39 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 40 </encoder> 41 </appender> 42 43 <!-- 按照每天生成日志文件 --> 44 <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 45 <file>${LOG_HOME}/${PROJECT_NAME}/info.log</file> 46 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 47 <level>INFO</level> 48 <onMatch>ACCEPT</onMatch> 49 <onMismatch>DENY</onMismatch> 50 </filter> 51 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 52 <!--日志文件输出的文件名--> 53 <fileNamePattern>${LOG_HOME}/${PROJECT_NAME}/info.log.%d{yyyy-MM-dd}.log</fileNamePattern> 54 <!--日志文件保留天数--> 55 <maxHistory>10</maxHistory> 56 </rollingPolicy> 57 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 58 <!--格式化输出,%d:日期;%thread:线程名;%-5level:级别,从左显示5个字符宽度;%msg:日志消息;%n:换行符--> 59 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 60 </encoder> 61 </appender> 62 63 <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 64 <file>${LOG_HOME}/${PROJECT_NAME}/error.log</file> 65 <!-- 只打印错误日志 --> 66 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 67 <level>ERROR</level> 68 <onMatch>ACCEPT</onMatch> 69 <onMismatch>DENY</onMismatch> 70 </filter> 71 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 72 <fileNamePattern>${LOG_HOME}/${PROJECT_NAME}/error.log.%d{yyyy-MM-dd}.log</fileNamePattern> 73 <maxHistory>10</maxHistory> 74 </rollingPolicy> 75 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 76 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> 77 </encoder> 78 </appender> 79 80 <!-- ELK专属Log输出 --> 81 <appender name="ELK_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 82 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 83 <!--日志文件输出的文件名--> 84 <fileNamePattern>${ELK_LOG_HOME}/%d{yyyy-MM-dd}.log</fileNamePattern> 85 <!--日志文件保留天数--> 86 <maxHistory>1</maxHistory> 87 <!--日志最多占用空间--> 88 <totalSizeCap>100GB</totalSizeCap> 89 </rollingPolicy> 90 <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> 91 <providers> 92 <pattern> 93 <pattern> 94 { 95 "project": "${ELK_PROJECT_NAME}", 96 "index": "${ELK_PROJECT_NAME}-%date{\"yyyy-MM\"}", 97 "timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss.SSSZZ\"}", 98 "log_level": "%level", 99 "thread": "%thread", 100 "class_name": "%class", 101 "line_number": "%line", 102 "message": "%message", 103 "stack_trace": "%exception{5}", 104 "trace": "%X{X-B3-TraceId:-}", 105 "span": "%X{X-B3-SpanId:-}", 106 "parent": "%X{X-B3-ParentSpanId:-}", 107 "exportable": "%X{X-Span-Export:-}" 108 } 109 </pattern> 110 </pattern> 111 </providers> 112 </encoder> 113 </appender> 114 115 116 117 <!-- 日志模块输出 --> 118 <root level="DEBUG"> 119 <appender-ref ref="STDOUT"/> 120 <appender-ref ref="DEBUG_LOG"/> 121 <appender-ref ref="INFO_LOG" /> 122 <appender-ref ref="ERROR_LOG"/> 123 <appender-ref ref="ELK_LOG"/>> 124 </root> 125 126</configuration>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )