springboot 整合log4j2 记录

    很少写博客;看了很多网上的教程,自己也试过了很多,有些问题也记录下来了希望能帮到其他朋友。

SpringBoot整合log4j2很简单,两步:

1、导入依赖。

2、配置log4j2-spring.xml。

1、我配置成功的依赖:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
			<exclusions><!-- 去掉默认配置(为log4j2准备) -->
				<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>

    网上很多都有说是 排除 spring-boot-starter-web 下的logging,然而我没有成功,不论怎么做都是报下面的错误;最后是需要在spring-boot-starter 下面排除,可能只是我的是这样子。。。

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/D:/programData/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/D:/programData/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.10.0/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

   2、log4j2-spring.xml 配置文件;参考着网上写的然后改的;打印输出的日志很详细,有sql语句,数据库信息等等。

该文件放置位置是 :\src\main\resources\log4j2-spring.xml,名字相对固定,这些操作后就可以了,然后运行时就可以自动读取这个文件了。

<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。

注:本配置文件的目标是将不同级别的日志输出到不同文件,最大2MB一个文件,
文件数据达到最大值时,旧数据会被压缩并放进指定文件夹
-->
<Configuration status="WARN" monitorInterval="600">

    <Properties>
        <!-- (*必须,各应用需要修改) 部署应用的名称,命名规则 :全部小写字母、中短横线、数字,与微服务命名,disconf中命名一致 -->
        <property name="APPNAME">HurdPlatform</property>
        <!-- (各应用需要修改)部署应用的端口号,用于一台服务器部署多台应用的情况,如果不需要,保持默认 -->
        <property name="PORT">${sys:crtServerPort:-8080}</property>
        <!--  日志文件的编码 -->
        <property name="log_charset">UTF-8</property>
        <!-- 日志文件最小切割单位 值不做强制要求,建议300MB -->
        <property name="every_file_size">300MB</property>
        <!-- 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 -->
        <Property name="LOG_HOME">Logs</Property>
        <!-- *必须并强制遵守 日志格式说明: |日志时间|线程id|端口号|应用名称|类名|方法名|日志级别|traceId |输入参数|输出参数|耗时|任意多个扩展字段|具体打印的msg内容然后换行 -->
        <property name="log_pattern">
            <!--%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n-->
            <!--标准格式-->
            <!--|%d{yyyy-MM-dd HH:mm:ss.SSS}|%t|${PORT}|${APPNAME}|%logger|%M|%p|%X{MDCCRT_GUID_TRACEID}|###+%X{MDCCRT_EXTENTS}-###|##+%X{MDCCRT_INPUT_PARAM}-##|##+%X{MDCCRT_OUTPUT_PARAM}-##|%X{MDCCRT_COST_TIME}|%m%n-->
            |%d{yyyy-MM-dd HH:mm:ss.SSS}|%t|${PORT}|${APPNAME}|%logger|%M|%p|%m%n
        </property>
    </Properties>

    <Appenders>
        <!--这个输出控制台的配置,这里输出除了warn和error级别的信息到System.out-->
        <Console name="console_out_appender" target="SYSTEM_OUT">
            <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式 -->
            <!--<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>-->
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
        </Console>
        <!--这个输出控制台的配置,这里输出warn和error级别的信息到System.err,在eclipse控制台上看到的是红色文字-->
        <!-- <Console name="console_err_appender" target="SYSTEM_ERR">
        &lt;!&ndash; 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) &ndash;&gt;
        <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
        &lt;!&ndash; 输出日志的格式 &ndash;&gt;
        <PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
        </Console>
        -->
        <!-- TRACE级别日志 -->
        <!-- 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,
        日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log -->
        <RollingRandomAccessFile name="trace_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/trace.log"
                                 filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
            <Policies><!-- 两个配置任选其一 -->
                <!-- 每个日志文件最大2MB -->
                <SizeBaseDTriggeringPolicy size="${every_file_size}" />
            </Policies>
            <Filters>
                <!-- 此Filter意思是,只输出debug级别的数据 -->
                <!-- DENY,日志将立即被抛弃不再经过其他过滤器;
                NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
                <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        <!-- DEBUG级别日志 -->
        <!-- 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内,
        日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出debug级别的数据到debug.log -->
        <RollingRandomAccessFile name="debug_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/debug.log"
                                 filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
            <Policies><!-- 两个配置任选其一 -->
                <!-- 每个日志文件最大2MB -->
                <SizeBaseDTriggeringPolicy size="${every_file_size}" />
                <!-- 如果启用此配置,则日志会按文件名生成新压缩文件,
                即如果filePattern配置的日期格式为 %d{yyyy-MM-dd HH} ,则每小时生成一个压缩文件,
                如果filePattern配置的日期格式为 %d{yyyy-MM-dd} ,则天生成一个压缩文件 -->
                <!-- <TimeBasedTriggeringPolicy interval="1" modulate="true" /> -->
            </Policies>
            <Filters>
                <!-- 此Filter意思是,只输出debug级别的数据 -->
                <!-- DENY,日志将立即被抛弃不再经过其他过滤器;
                NEUTRAL,有序列表里的下个过滤器过接着处理日志;
                ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        <!-- INFO级别日志 -->
        <RollingRandomAccessFile name="info_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/info.log"
                                 filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
            <Policies>
                <SizeBaseDTriggeringPolicy size="${every_file_size}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        <!-- WARN级别日志 -->
        <RollingRandomAccessFile name="warn_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/warn.log"
                                 filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
            <Policies>
                <SizeBaseDTriggeringPolicy size="${every_file_size}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>

        <!-- ERROR级别日志 -->
        <RollingRandomAccessFile name="error_appender"
                                 immediateFlush="true" fileName="${LOG_HOME}/error.log"
                                 filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
            <PatternLayout charset="${log_charset}" pattern="${log_pattern}" />
            <Policies>
                <SizeBaseDTriggeringPolicy size="${every_file_size}" />
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <!--过滤掉无用的DEBUG信息-->
        <logger name="org.springframework" level="info"></logger>
        <logger name="org.mybatis" level="info"></logger>
        <logger name="org.thymeleaf" level="info"></logger>

        <!-- 第三方日志系统 -->
        <logger name="org.springframework.core" level="info"/>
        <logger name="org.springframework.beans" level="info"/>
        <logger name="org.springframework.context" level="info"/>
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.apache.http" level="warn"/>
<!--控制台显示的内容 -->
        <root level="all">
            <appender-ref ref="console_out_appender"/>
            <appender-ref ref="info_appender"/>
            <appender-ref ref="warn_appender"/>
            <appender-ref ref="error_appender"/>
        </root>
    </Loggers>

</Configuration>

猜你喜欢

转载自blog.csdn.net/qq_28911061/article/details/82624047