一、想法
项目中要记录日志方便日后查询,而springboot内置了日志功能,由于度娘的强大,找到很多各种写法的,于是便归纳了一下,方便使用。
二、SpringBoot依赖
创建SpringBoot项目的pom文件都会引用一个parent,进入parent会有日志的各种依赖,这时就不用自己添加依赖 如下:
三、log4j具体配置
<?xml version="1.0" encoding="UTF-8"?><configuration>
<Properties>
<Property name="LOG_PATTERN">
"%highlight{[%-5p] %d %c - %m%n}{FATAL=red, ERROR=red, WARN=white, INFO=blue, DEBUG=yellow,TRACE=cyan}"
</Property>
<Property name="LOG_FILE_PATH">./logs</Property>
</Properties>
<appenders>
<!-- 控制台输出 -->
<Console name="CONSOLE" target="SYSTEM_OUT">
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout charset="UTF-8" pattern="${LOG_PATTERN}"/>
</Console>
<!-- fileName:输出路径 filePattern:命名规则 -->
<RollingFile name="runtimeFile" fileName="${LOG_FILE_PATH}/utsapi.log"
filePattern="${LOG_FILE_PATH}/utsapi-%d{yyyy-MM-dd}.%i.log">
<Filters>
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 输出格式 -->
<PatternLayout charset="UTF-8" pattern="${LOG_PATTERN}"/>
<Policies>
<!-- SizeBasedTriggeringPolicy单个文件的大小限制 -->
<SizeBasedTriggeringPolicy size="100KB"/>
<!-- 每天创建一个日志文件 -->
<!-- <TimeBasedTriggeringPolicy interval="1" />-->
</Policies>
<!-- DefaultRolloverStrategy同一个文件下的最大文件数 -->
<DefaultRolloverStrategy max="2">
<Delete basePath="${LOG_FILE_PATH}" maxDepth="2">
<IfFileName glob="*.log"/>
<!--age 保存天数 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
<IfLastModified age="3d"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</appenders>
<loggers>
<!--过滤掉spring无用的debug信息-->
<!-- <logger name="org.springframework" level="error"></logger>-->
<root level="DEBUG">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="runtimeFile"/>
</root>
</loggers></configuration>
注意:
basePath 定义了扫描日志文件的根门路。
maxDepth 定义了遍历的层级,1示意 bashPath 下的所有文件
IfFileName 定义了扫描的文件格式
IfLastModified 定义了只有在最初拜访工夫在3天以上的才会被删除
删除操作只会产生在日志滚动时,而滚动的机会取决于 filePattern 和 Triggering Policies (下面配置中 Policies 局部)
IfFileName 指定删除的文件格式,只有符合条件都会被删除,并没有限度是通过以后服务输入。下面这样配置是为了只删除历史日志文件。
IfFileName 和 IfLastModified 都属于 pathConditions。pathConditions 是一个数组,决定哪些文件会被删除,如果定义了多个,须要多个条件同时满足才会被删除。