SpringBoot杂碎知识 (三) 日志的配置

在开发和运维中日志的处理可是少不了的,这里我们就来说明一下SpringBoot中的日志配置

首先说明下SpringBoot支持的日志框架

Java Util Logging、Log4J2、logback

其中呢SpringBoot默认使用的是logback,配置方式有默认配置和引用外部文件配置两种。

配置方式

一、默认配置方式

SpringBoot默认使用的是logback。

如果你在Maven中添加的以下依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

其实这个是不需要的,因为SpringBoot的spring-boot-starter中包含了spring-boot-starter-logging。

日志级别从高到低分为

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

yml中加入 

logging:
  level:
    root: debug

新建一个测试类,发现日志就已经输出了

如果想自定义包的日志级别 可以在l添加如下配置

logging:
  level:
    root: debug
    com.maoxs: info #自定义包的日志输出级别

如果想改变日志的输出格式则添加如下配置

logging:
  pattern:
    console: "%d -%msg%n"

如果想输出为文件形式则可以添加如下配置

logging:
  pattern:
    console: "%d -%msg%n"
#  path: E:\springBootSomeProject\
#  file: E:\springBootSomeProject\log
  level:
    root: debug

logging.file 设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log

logging.path 设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=E:\somePaoject

但是二者不能同时使用,如若同时使用,则只有logging.file生效 
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO

插件使用 由于日志每次都要写这么一行玩意

 private final  static Logger logger=LoggerFactory.getLogger(******.class);

可以使用lombok插件 具体安装可以去百度 (未来我会放上使用贴)

也可以实现日志的效果,很方便。

二、自定义日志配置

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  • 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

spring官方提示建议您使用-spring变量进行日志记录配置 例如,logback-spring.xml而不是logback.xml

也就是说如果命名为logback.xml将无法初始化日志配置

如果是spring指认的默认配置文件则yml不需要配置任何东西就可以生效,如果不是的话则需要指认下添加如下配置即可

logging:
  path: classpath:logback-xxxx.xml

这里贴出一份基础的 logback-spring.xml,供大家测试 想学习更深的话 点击logback学习网站

比较方便的是 不同环境中间的配置 可以用<springProfile name="profile"> 标签来包括

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
	<substitutionProperty name="log.proj" value="${project.artifactId}" />
	<substitutionProperty name="log.base" value="logs/${log.proj}" />
    <substitutionProperty name="max.size" value="100MB" />
    <jmxConfigurator />

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
        </layout>
    </appender>

    <appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${log.base}/${log.proj}_info.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
		  <fileNamePattern>${log.base}/${log.proj}_info.%i.gz</fileNamePattern>
		  <minIndex>1</minIndex>
		  <maxIndex>20</maxIndex>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
		  <maxFileSize>${max.size}</maxFileSize>
		</triggeringPolicy>
		<encoder>
		  <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <root level="DEBUG">
        <appender-ref ref="stdout" />
        <appender-ref ref="file.info" />
    </root>
    <logger name="com.maoxs" additivity="false">
 		<appender-ref ref="file.info" />
       	<level value="INFO" />
	</logger>
</configuration>

这里在说下log4j2的配置把 可能有些小伙伴还是喜欢log4j2的配置规则

如果想使用log4j2则需要去除spring-boot-starter-logging 因为会冲突 

  <!--去除 spring-boot-starter-logging -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>

这里也贴出一个log4j2的基础配置,供大家测试 想学习更多配置 点击 log4j2学习网站

<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
     你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
     30s 刷新此配置
-->
<configuration status="WARN" monitorInterval="30">

    <!-- 日志文件目录、压缩文件目录、日志格式配置  /Users/admin/Code 根据自己的需求改变-->
    <properties>
        <Property name="fileName">/Users/admin/Code/log</Property>
        <Property name="fileGz">/Users/admin/Code/log/7z</Property>
        <Property name="PID">????</Property>
        <Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
    </properties>

    <Appenders>
        <!-- 输出控制台日志的配置 -->
        <Console name="console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>

        <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
                                    filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">
            <PatternLayout pattern="${LOG_PATTERN}"/>

            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB"/>
            </Policies>

            <Filters>
                <!-- 只记录info和warn级别信息 -->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>

            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>

        <!-- 存储所有error信息 -->
        <RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
                                    filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">
            <PatternLayout pattern="${LOG_PATTERN}"/>

            <Policies>
                <SizeBasedTriggeringPolicy size="50 MB"/>
            </Policies>

            <Filters>
                <!-- 只记录error级别信息 -->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>

            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="50"/>
        </RollingRandomAccessFile>
    </Appenders>

    <!-- Mixed sync/async -->
    <Loggers>
        <Root level="debug" includeLocation="true">
            <AppenderRef ref="console"/>
            <AppenderRef ref="infoFile"/>
            <AppenderRef ref="errorFile"/>
        </Root>

        <AsyncRoot level="debug" includeLocation="true">
            <AppenderRef ref="console"/>
            <AppenderRef ref="infoFile"/>
            <AppenderRef ref="errorFile"/>
        </AsyncRoot>
    </Loggers>

</configuration>

配置方法和logback 自动以配置一样  

值得一提的是lombok 也提供了log4j2的简便用法 在类上加入@Log4j2 注解即可

注:如果不对联系本宝宝及时改正委屈~

猜你喜欢

转载自blog.csdn.net/qq_32867467/article/details/81413920
今日推荐