springboot使用Logi4j2收集日志

SpringBoot2.0+ 使用Log4j2日志输出 据说Log4j2相比log4j效率有很大提升。

1.pom.xml导入

    	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions><!-- 去掉springboot默认配置 -->
                <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>

2.新建默认配置文件log4j2-spring.xml 内容如下


<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j2 自动检测修改配置文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--变量配置-->
    <Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
        <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
        <!-- 定义日志存储的路径,不要配置相对路径 -->
        <property name="FILE_PATH" value="E:/logs" />
        <property name="FILE_NAME" value="boot-log4j2" />
    </Properties>

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

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <File name="Filelog" fileName="${FILE_PATH}/log4j2.log" append="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy同一文件夹下15个文件开始覆盖 不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy同一文件夹下15个文件开始覆盖 不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy同一文件夹下15个文件开始覆盖 不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>
    </appenders>

    <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
    <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </logger>
        <!--监控系统信息-->
        <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
        <Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
        <!--日志级别-->
        <root level="debug">
            <appender-ref ref="Console"/>
            <appender-ref ref="Filelog"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

如果配置文件使用其它名字需在yml文件中进行配置

logging:
config: xxxx.xml

3.使用

    protected static Logger logger = LoggerFactory.getLogger(PCDynaDaoTemplateImpl.class);

    logger .trace("trace level");
    logger .debug("debug level");
    logger .info("info level");
    logger .warn("warn level");
    logger .error("error level");

如使用了lombok可用注解@Slf4j 代替 protected static Logger logger = LoggerFactory.getLogger(PCDynaDaoTemplateImpl.class);


4.使用prop’erties文件进行配置

status = error
dest = err
name = PropertiesConfig

#公共变量
#文件路径
property.filePath=e://logs
property.filePattern=e://logs/%d{yyyy}/%d{MM}
#输出格式
property.layoutPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ %c ] %m%n

# 级别过滤(过滤日志记录)
#filters = threshold
filter.threshold.type = ThresholdFilter
# 只记录debug级别以上的日志,大小写无关:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)
filter.threshold.level = debug

# 根记录器,所有记录器的父辈
rootLogger.level = debug


appender.console.type = Console
appender.console.name = STDOUT
appender.console.target = SYSTEM_OUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = ${layoutPattern}
rootLogger.appenderRef.stdout.ref = STDOUT


appender.D.type = RollingFile
appender.D.name = DebugRollingFile
appender.D.fileName = ${filePath}/opdata-debug.log
appender.D.filePattern = ${filePattern}/opdata_debug.log
appender.D.layout.type = PatternLayout
appender.D.layout.pattern = ${layoutPattern}
appender.D.policies.type = Policies
appender.D.policies.time.type = TimeBasedTriggeringPolicy
appender.D.policies.time.interval = 1
appender.D.policies.time.modulate = true
appender.D.policies.size.type = SizeBasedTriggeringPolicy
appender.D.policies.size.size=20M
appender.D.strategy.type = DefaultRolloverStrategy
appender.D.strategy.max = 100
#过滤debug以上信息
appender.D.filter.threshold.type = ThresholdFilter
appender.D.filter.threshold.level = INFO
appender.D.filter.threshold.onMatch = DENY
appender.D.filter.threshold.onMisMatch=NEUTRAL

rootLogger.appenderRef.D.ref=DebugRollingFile
rootLogger.appenderRef.D.level=debug

appender.I.type = RollingFile
appender.I.name = InfoRollingFile
appender.I.fileName = ${filePath}/opdata-info.log
appender.I.filePattern = ${filePattern}/opdata_info.log
appender.I.layout.type = PatternLayout
appender.I.layout.pattern = ${layoutPattern}
appender.I.policies.type = Policies
appender.I.policies.time.type = TimeBasedTriggeringPolicy
appender.I.policies.time.interval = 1
appender.I.policies.time.modulate = true
appender.I.policies.size.type = SizeBasedTriggeringPolicy
appender.I.policies.size.size=20M
appender.I.strategy.type = DefaultRolloverStrategy
appender.I.strategy.max = 100
#过滤INFO以上信息
appender.I.filter.threshold.type = ThresholdFilter
appender.I.filter.threshold.level = WARN
appender.I.filter.threshold.onMatch = DENY
appender.I.filter.threshold.onMisMatch=NEUTRAL

rootLogger.appenderRef.I.ref = InfoRollingFile
rootLogger.appenderRef.I.level=INFO

appender.W.type = RollingFile
appender.W.name = WarnRollingFile
appender.W.fileName = ${filePath}/opdata-warn.log
appender.W.filePattern = ${filePattern}/opdata_warn.log
appender.W.layout.type = PatternLayout
appender.W.layout.pattern = ${layoutPattern}
appender.W.policies.type = Policies
appender.W.policies.time.type = TimeBasedTriggeringPolicy
appender.W.policies.time.interval = 1
appender.W.policies.time.modulate = true
appender.W.policies.size.type = SizeBasedTriggeringPolicy
appender.W.policies.size.size=20M
appender.W.strategy.type = DefaultRolloverStrategy
appender.W.strategy.max = 100
#过滤warn以上信息
appender.W.filter.threshold.type = ThresholdFilter
appender.W.filter.threshold.level = ERROR
appender.W.filter.threshold.onMatch = DENY
appender.W.filter.threshold.onMisMatch=NEUTRAL

rootLogger.appenderRef.W.ref = WarnRollingFile
rootLogger.appenderRef.W.level=WARN

appender.E.type = RollingFile
appender.E.name = ErrorRollingFile
appender.E.fileName = ${filePath}/opdata-error.log
appender.E.filePattern = ${filePattern}/opdata_error.log
appender.E.layout.type = PatternLayout
appender.E.layout.pattern = ${layoutPattern}
appender.E.policies.type = Policies
appender.E.policies.time.type = TimeBasedTriggeringPolicy
appender.E.policies.time.interval = 1
appender.E.policies.time.modulate = true
appender.E.policies.size.type = SizeBasedTriggeringPolicy
appender.E.policies.size.size=20M
appender.E.strategy.type = DefaultRolloverStrategy
appender.E.strategy.max = 100
#过滤ERROR以上信息
appender.E.filter.threshold.type = ThresholdFilter
appender.E.filter.threshold.level = FATAL
appender.E.filter.threshold.onMatch = DENY
appender.E.filter.threshold.onMisMatch=NEUTRAL

rootLogger.appenderRef.E.ref = ErrorRollingFile
rootLogger.appenderRef.E.level=ERROR

appender.F.type = RollingFile
appender.F.name = FatalRollingFile
appender.F.fileName = ${filePath}/opdata-fatal.log
appender.F.filePattern = ${filePattern}/opdata_fatal.log
appender.F.layout.type = PatternLayout
appender.F.layout.pattern = ${layoutPattern}
appender.F.policies.type = Policies
appender.F.policies.time.type = TimeBasedTriggeringPolicy
appender.F.policies.time.interval = 1
appender.F.policies.time.modulate = true
appender.F.policies.size.type = SizeBasedTriggeringPolicy
appender.F.policies.size.size=20M
appender.F.strategy.type = DefaultRolloverStrategy
appender.F.strategy.max = 100

rootLogger.appenderRef.F.ref = FatalRollingFile
rootLogger.appenderRef.F.level=FATAL

#appender.S.type = Socket
#appender.S.name= SocketTCP
#appender.S.host = 10.10.1.169
#appender.S.port=4560
#appender.S.protocol = TCP
#appender.S.layout.type = JsonLayout
#appender.S.layout.compact = true
#appender.S.layout.eventEol = true
#appender.S.connectTimeoutMillis = 2000
#rootLogger.appenderRef.S.ref=SocketTCP
#rootLogger.appenderRef.S.level=socket

#配置第三方包的日志
logger.jpath.name=com.jayway.jsonpath
logger.jpath.level=error

logger.mongodb.name=org.mongodb.driver
logger.mongodb.level=error

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值