①,排除logback的包html
②,排除转换包log4j-to-slf4jweb
③,引入slf4j-log4j12spring
④,官方说明apache
⑤,最终pom.xml 以下app
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency>
⑥,虽然能够切换成log4j,但 不建议这么作,就是由于log4j有性能问题,才出来log4j2和logback。默认的logback已经能知足咱们不少场景了。async
⑦,log4j.xmlspring-boot
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration> <!-- 将日志信息输出到控制台 --> <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <!-- 设置日志输出的样式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 设置日志输出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> <!--过滤器设置输出的级别--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <!-- 设置日志输出的最小级别 --> <param name="levelMin" value="WARN" /> <!-- 设置日志输出的最大级别 --> <param name="levelMax" value="ERROR" /> <!-- 设置日志输出的xxx,默认是false --> <param name="AcceptOnMatch" value="true" /> </filter> </appender> <!-- 将日志信息输出到文件,可是当文件的大小达到某个阈值的时候,日志文件会自动回滚 --> <appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender"> <!-- 设置日志信息输出文件全路径名 --> <param name="File" value="D:/log4j/RollingFileAppender.log" /> <!-- 设置是否在从新启动服务时,在原有日志的基础添加新日志 --> <param name="Append" value="true" /> <!-- 设置保存备份回滚日志的最大个数 --> <param name="MaxBackupIndex" value="10" /> <!-- 设置当日志文件达到此阈值的时候自动回滚,单位能够是KB,MB,GB,默认单位是KB --> <param name="MaxFileSize" value="10KB" /> <!-- 设置日志输出的样式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 设置日志输出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender> <!-- 将日志信息输出到文件,能够配置多久产生一个新的日志信息文件 --> <appender name="DailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <!-- 设置日志信息输出文件全路径名 --> <param name="File" value="D:/log4j/DailyRollingFileAppender.log" /> <!-- 设置日志每分钟回滚一次,即产生一个新的日志文件 --> <param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" /> <!-- 设置日志输出的样式 --> <layout class="org.apache.log4j.PatternLayout"> <!-- 设置日志输出的格式 --> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" /> </layout> </appender> <!-- 根logger的设置--> <root> <level value ="INFO"/> <appender-ref ref="ConsoleAppender"/> <appender-ref ref="DailyRollingFileAppender"/> </root> </log4j:configuration>
log4j2的切换跟切换log4j是不一样的,SpringBoot提供了log4j2的starter性能
①,排除spring-boot-starter-loggingspa
②,引入spring-boot-starter-log4j2debug
③,pom.xml
<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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
④,log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <!-- 先定义全部的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} log4j22xiaosu2 %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <RollingFile name="RollingFile" fileName="logs/web.log" filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="2MB"/> </RollingFile> </appenders> <!-- 而后定义logger,只有定义了logger并引入的appender,appender才会生效 --> <loggers> <!-- 创建一个默认的root的logger --> <root level="info"> <appender-ref ref="Console"/> <appender-ref ref="RollingFile"/> </root> </loggers> </configuration>
①,logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <property name="LOG_HOME" value="${user.dir}/logs/webflux"/> <property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread] %-5level %logger{80} - %msg%n"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${ENCODER_PATTERN}</pattern> </layout> </appender> <!-- 访问日志 --> <appender name="COMMON_ACCESS" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/common-access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/history/common-access-%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> </appender> <!-- 系统INFO日志 --> <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/history/info-%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder charset="UTF-8"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> </appender> <!-- 系统ERROR日志 --> <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/history/error-%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <encoder charset="UTF-8"> <pattern>${ENCODER_PATTERN}</pattern> </encoder> </appender> <appender name="ASYNC_LOG" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>1234</queueSize> <appender-ref ref="INFO_LOG"/> </appender> <logger name="asyncLog" level="INFO" additivity="false"> <appender-ref ref="ASYNC_LOG"/> </logger> <logger name="errorLog" level="ERROR" additivity="false"> <appender-ref ref="ERROR_LOG"/> </logger> <logger name="commonAccess" level="INFO" additivity="false"> <appender-ref ref="COMMON_ACCESS"/> </logger> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="INFO_LOG"/> <appender-ref ref="ERROR_LOG"/> </root> </configuration>