Springboot使用log4j2日志
1、pom.xml引用依赖
springboot默认是用logback的日志框架的,所以需要排除logback,不然会出现jar依赖冲突的报错
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <exclusions> 5 <!--排除掉默认的日志配置 spring-boot-starter-xxx下都可排除,已知web和test可--> 6 <exclusion> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-logging</artifactId> 9 </exclusion> 10 </exclusions> 11 </dependency> 12 <dependency> 13 <groupId>org.springframework.boot</groupId> 14 <artifactId>spring-boot-starter-log4j2</artifactId> 15 </dependency>
2、配置文件yml文件和xml配置文件:两个文件均在resources下
application.yml部分配置如下
1 mybatis-plus: 2 mapper-locations: classpath:/mapper/**/*.xml 3 type-aliases-package: com.xxx.xxx.entity # 注意:对应实体类的路径 4 5 6 7 8 logging: 9 config: classpath:log4j2.xml 10 level: 11 com.xxx.xxx.dao: DEBUG #这个指定你的dao层,也就是mapper文件的所在包
日志的Level:
1、trace (追踪)
2、debug (调试)
3、info (信息)
4、warn (警告)
5、error (错误)
6、fatal (严重错误)
log4j2.xml配置如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> 3 <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> 4 <configuration status="WARN" monitorInterval="30"> 5 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> 6 <!--变量配置--> 7 <Properties> 8 <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> 9 <!-- %logger{36} 表示 Logger 名字最长36个字符 --> 10 <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> 11 <!-- 定义日志存储的路径,不要配置相对路径 以下为保存到程序运行目录的父目录下的 logs/项目名称 (文件夹)下--> 12 <property name="FILE_PATH" value="./logs/项目名称" /> 13 <!-- 定义项目名称 --> 14 <property name="FILE_NAME" value="更换为你的项目名" /> 15 </Properties> 16 17 <!--先定义所有的appender--> 18 <appenders> 19 <!--这个输出控制台的配置--> 20 <console name="Console" target="SYSTEM_OUT"> 21 <!--输出日志的格式--> 22 <PatternLayout pattern="${LOG_PATTERN}"/> 23 <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch) 注意:设置level为info看不到curd的sql信息,trace则会显示查询结果--> 24 <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> 25 </console> 26 27 <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> 28 <File name="Filelog" fileName="${FILE_PATH}/test.log" append="false"> 29 <PatternLayout pattern="${LOG_PATTERN}"/> 30 </File> 31 32 <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> 33 <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz"> 34 <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> 35 <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> 36 <PatternLayout pattern="${LOG_PATTERN}"/> 37 <Policies> 38 <!--interval属性用来指定多久滚动一次,默认是1 hour--> 39 <TimeBasedTriggeringPolicy interval="1"/> 40 <SizeBasedTriggeringPolicy size="100MB"/> 41 </Policies> 42 <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> 43 <DefaultRolloverStrategy max="15"/> 44 </RollingFile> 45 46 <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> 47 <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz"> 48 <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> 49 <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> 50 <PatternLayout pattern="${LOG_PATTERN}"/> 51 <Policies> 52 <!--interval属性用来指定多久滚动一次,默认是1 hour--> 53 <TimeBasedTriggeringPolicy interval="1"/> 54 <SizeBasedTriggeringPolicy size="10MB"/> 55 </Policies> 56 <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> 57 <DefaultRolloverStrategy max="15"/> 58 </RollingFile> 59 60 <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> 61 <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz"> 62 <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> 63 <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> 64 <PatternLayout pattern="${LOG_PATTERN}"/> 65 <Policies> 66 <!--interval属性用来指定多久滚动一次,默认是1 hour--> 67 <TimeBasedTriggeringPolicy interval="1"/> 68 <SizeBasedTriggeringPolicy size="10MB"/> 69 </Policies> 70 <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--> 71 <DefaultRolloverStrategy max="15"/> 72 </RollingFile> 73 </appenders> 74 75 <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。--> 76 <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> 77 <loggers> 78 <!--监控系统信息--> 79 <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--> 80 <!--过滤掉spring和mybatis等的一些无用的DEBUG信息, name值参考打印信息或者pom文件?取其包名前2个--> 81 <logger name="org.mybatis" level="info" additivity="false"> 82 <AppenderRef ref="Console"/> 83 </logger> 84 <logger name="org.mybatis" level="info" additivity="false"> 85 <AppenderRef ref="Console"/> 86 </logger> 87 <logger name="com.alibaba" level="info" additivity="false"> 88 <AppenderRef ref="Console"/> 89 </logger> 90 <logger name="com.zaxxer" level="info" additivity="false"> 91 <AppenderRef ref="Console"/> 92 </logger> 93 94 <!--配置输出sql语句--> 95 <logger name="org.apache.ibatis" level="DEBUG"/> 96 <logger name="java.sql.Connection" level="DEBUG"/> 97 <logger name="java.sql.Statement" level="DEBUG"/> 98 <logger name="java.sql.PreparedStatement" level="DEBUG"/> 99 100 <root level="info"> 101 <appender-ref ref="Console"/> 102 <appender-ref ref="RollingFileInfo"/> 103 <appender-ref ref="RollingFileWarn"/> 104 <appender-ref ref="RollingFileError"/> 105 </root> 106 </loggers> 107 </configuration>
参考:https://blog.csdn.net/u012150590/article/details/86601175
https://blog.csdn.net/whl190412/article/details/93487625
https://www.cnblogs.com/suizhikuo/p/15952005.html
作者:冢本八云
个性签名:
如果你是鱼,不要迷恋天空。如果你是鸟,不要迷恋海洋。幸福便好,阳光聚散,不应多说。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!(っ•̀ω•́)っ✎⁾⁾