SpringBoot返回值统一处理和统一日志
目的:确定统一的返回json格式,便于统一管理,操作,阅读
1.统一返回值
1.1思路
构建一个JavaBean设置相关属性:状态,状态码,消息,数据对外暴露两个方法设计链式编程,操作返回数据
1.2代码
@Data
public class R{
@ApiModelProperty(value
= "是否成功")
private boolean succss
;
@ApiModelProperty(value
= "返回状态码")
private Integer code
;
@ApiModelProperty(value
= "返回消息")
private String messgae
;
@ApiModelProperty(value
= "返回数据")
private Map
<String, Object> data
= new HashMap<>();
public static R
ok(){
R r
= new R();
r
.setSuccess(true);
r
.setCode(20000);
r
.setMessage("成功");
return r
;
}
public static R
error(){
R r
= new R();
r
.setSuccess(false);
r
.setCode(20001);
r
.setMessage("失败");
return r
;
}
public R
success(Boolean success
){
this.setSuccess(success
);
return this;
}
public R
message(String message
){
this.setMessage(message
);
return this;
}
public R
code(Integer code
){
this.setCode(code
);
return this;
}
public R
data(String key
, Object value
){
this.data
.put(key
, value
)
return this;
}
public R
data(Map
<String, Object> map
){
this.setData(map
);
return this;
}
}
2.统一日志输出
2.1日志文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<contextName>logback
</contextName>
<property name="log.path" value="E:/javaProject/guli_log/edu" />
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO
</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}
</Pattern>
<charset>UTF-8
</charset>
</encoder>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_info.log
</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
<charset>UTF-8
</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15
</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO
</level>
<onMatch>ACCEPT
</onMatch>
<onMismatch>DENY
</onMismatch>
</filter>
</appender>
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_warn.log
</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
<charset>UTF-8
</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15
</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn
</level>
<onMatch>ACCEPT
</onMatch>
<onMismatch>DENY
</onMismatch>
</filter>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/log_error.log
</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
<charset>UTF-8
</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15
</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR
</level>
<onMatch>ACCEPT
</onMatch>
<onMismatch>DENY
</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<logger name="com.aiguigu" level="INFO" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<springProfile name="pro">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile>
</configuration>
2.2配置
把上面的日志文件放在工具包中的resources中,然后再每个微服务模块application中引入日志文件即可实现统一日志
#logback 日志
logging.config=classpath:logback-spring.xml
注:仅用于学习交流