SpringBoot配置logback日志一些方法
一、SpringBoot配置指定某一个类的log输出到指定目录或文件里
在logback-spring.xml中 ,新增一个logger,并指定其appender。
<!-- 定义日志存储的地址 -->
<property name="log_address" value="logs/iclass_web_service/info"/>
<!-- log info start -->
<appender name="LOG_VERIFY_CODE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log_address}/verify-code-%d{yyyy-MM-dd}.log
</FileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<pattern>
%msg%n
</pattern>
<charset>UTF-8</charset>
</pattern>
</encoder>
</appender>
<!-- 定义打印日志的类 -->
<logger name="com.server.commons.utils.log.VerifyCodeLog" level="INFO">
<appender-ref ref="LOG_VERIFY_CODE"/>
</logger>
这里需要注意三点:1 将value里日志存储的地址设置好,2 在logger name里指定要打印log的类在项目里的位置,3 appender指定一下。
appender呢是负责写日志的组件(具体可以去看看java school里的log教程:http://www.51gjie.com/javaweb/1110.html)。主要有三种
ConsoleAppender: 把日志打印到控制台;FileAppender: 把日志输出到文件;RollingFileAppender: 滚动记录地把日志输出到文件, 也就是可以支持日志文件按文件大小拆分,或者按日期拆分。按需选择就好。
最后,在指定的类里修改一下getlogger
private Logger logger = LoggerFactory.getLogger(VerifyCodeLog.class);
二、SpringBoot配置以json格式输出日志
这个两种方法可参考
第一种:采用logstash-logback-encoder来实现JSON日志输出
引入一下依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
<!--springboot日志-start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
配置一下logback-spring.xml
<!-- 定义日志存储的地址 -->
<property name="log_address" value="logs/iclass_web_service/info"/>
<!-- log info start -->
<appender name="log" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log_address}/verify-code-info.%d{yyyy-MM-dd}.log
</FileNamePattern>
</rollingPolicy>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{ "time":"%d{yyyy-MM-dd HH:mm:ss}",
"message": "%message"}
%n
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<logger name="com.server.commons.utils.log.VerifyCodeLog" level="INFO">
<appender-ref ref="log"/>
</logger>
最后,在指定的类里修改一下getlogger
private Logger logger = LoggerFactory.getLogger(VerifyCodeLog.class);
第二种:直接在类里使用JSONObject
对于要log的message,直接创建一个json object,把需要的message put进去
public class VerifyCodeLog {
private static VerifyCodeLog instance = new VerifyCodeLog();
private Logger logger = LoggerFactory.getLogger(VerifyCodeLog.class);
public void info(String msg) {
logger.info(msg);
}
public static void log(String phone,String msg) {
JSONObject object = new JSONObject();
object.put("time",time);
object.put("msg",msg);
instance.info(object.toJSONString());
}
}
public SendVerifyCodeResponse sendVerifyCode(SendVerifyCodeRequest request) {
String phone= request.getPhone();
SmsResponse smsResponse = verifyCodeManager.sendVerifyCode(phone, verifyCode);
int errorCode = smsResponse.getError();
if (errorCode == 0) {
VerifyCodeLog.log(System.currentTimeMillis(),phone);
return new SendVerifyCodeResponse();
}
然后,配置一下logback-spring.xml,这里就只需要一般配置就好了
<!-- 定义日志存储的地址 -->
<property name="log_address" value="logs/iclass_web_service/info"/>
<!-- log info start -->
<appender name="LOG_VERIFY_CODE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log_address}/verify-code-%d{yyyy-MM-dd}.log
</FileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<pattern>
%msg%n
</pattern>
<charset>UTF-8</charset>
</pattern>
</encoder>
</appender>
<logger name="com.server.commons.utils.log.VerifyCodeLog" level="INFO">
<appender-ref ref="LOG_VERIFY_CODE"/>
</logger>
这里如果从业务角度考虑,会比较推荐使用第二种方法,因为logstash是可以配置把log打到第三方服务的,只是logjson的话没必要引入一个大的中间件,会把服务加重。
三、一些滚动策略配置的简单介绍
TimeBasedRollingPolicy:
- fileNamePattern(必填),由文件名加上一个%d的占位符。可指定日期格式,时区
- maxHistory(选填),int值,指定log文件最大保留历史
- totalSizeCap(选填),int,归档文件的最大size
- cleanHistoryOnStart(选填),Boolean,在appender启动时,是否删除归档文件
FixedWindowRollingPolicy:
1. minIndex:窗口索引最小值,maxIndex:窗口索引最大值,太大时默认为20
2. fileNamePattern:必须包含“%i”作为占位符,xxx.log-%i.log归档文件会从xxx.log-minIndex.log到xxx.log-maxIndex.log
SizeAndTimeBasedRollingPolicy:
和TimeBased差不多,不过多了个size限制
1.maxFileSize:文件最大size
官方超详细https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy
SizeBasedTriggeringPolicy:
观察当前活动文件的大小,如果已经大于了指定的值,它会给 RollingFileAppender 发一个信号触发对当前活动文件的轮转。http://www.51gjie.com/javaweb/1120.html