修改日志记录

This commit is contained in:
haozq 2025-09-28 09:34:45 +08:00
parent 55dca459a0
commit 23308b03a5
7 changed files with 175 additions and 31 deletions

View File

@ -0,0 +1,14 @@
package com.bonus.emergencyrap.mapper;
import com.bonus.emergencyrap.vo.TaskMessageVo;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LogsMapper {
/**
* 添加日志数据
* @param logs
*/
void addLogs(TaskMessageVo logs);
}

View File

@ -2,6 +2,7 @@ package com.bonus.emergencyrap.service;
import com.alibaba.fastjson2.JSON;
import com.bonus.emergencyrap.constant.TextConstants;
import com.bonus.emergencyrap.mapper.LogsMapper;
import com.bonus.emergencyrap.utils.DateTimeHelper;
import com.bonus.emergencyrap.utils.TextFileUtils;
import com.bonus.emergencyrap.utils.UploadFile;
@ -9,6 +10,7 @@ import com.bonus.emergencyrap.vo.TaskMessageVo;
import com.bonus.emergencyrap.vo.TaskProcessVo;
import com.bonus.emergencyrap.vo.TaskVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.UUID;
@ -17,48 +19,36 @@ import java.util.UUID;
@Slf4j
public class LogsUtils {
@Autowired
private LogsMapper mapper;
public final static String SUCCESS="1";
public final static String FAIL="0";
/**
* 执行日志添加
* @param vo
* @param processVo
* @param success
* @param success 1成功 2失败
* @param message
*/
public void addLogs(TaskVo vo, TaskProcessVo processVo,String success,String message) {
try{
String day=DateTimeHelper.getNowYMD();
String filePtah= UploadFile.getFilePath(TextConstants.LOGS+day);
boolean isCz=TextFileUtils.exists(filePtah);
TaskMessageVo logs=new TaskMessageVo();
String uuid=UUID.randomUUID().toString();
logs.setTaskId(vo.getTaskId());
logs.setId(uuid);
logs.setTaskName(vo.getTaskName());
logs.setDay(day);
logs.setId(UUID.randomUUID().toString());
logs.setCreateTime(DateTimeHelper.getNowTime());
//记录失败的 操作元素
if(FAIL.equals(success)){
logs.setErrId(processVo.getId());
}
logs.setStatus(success);
logs.setMessage(message);
appendToFile(filePtah, JSON.toJSONString(logs),uuid,!isCz);
mapper.addLogs(logs);
}catch (Exception e){
log.error(e.getMessage(),e);
}
}
/**
* 添加数据
* @param filePath
* @param content
* @param id
* @param append
*/
public void appendToFile(String filePath,String content,String id,boolean append){
if(append){
TextFileUtils.createFile(filePath);
}else{
TextFileUtils.appendToFile(filePath,"\n");
}
TextFileUtils.appendToFile(filePath,id);
TextFileUtils.appendToFile(filePath,"=");
TextFileUtils.appendToFile(filePath,content);
}
}

View File

@ -4,9 +4,13 @@ import lombok.Data;
@Data
public class TaskProcessVo {
/**
* 任务id
*/
private String taskId;
/**
* id
*/
private String id;
/**

View File

@ -21,9 +21,7 @@ server:
# 日志配置
logging:
level:
com.bonus: debug
org.springframework: warn
config: classpath:logback-spring.xml
# Spring配置
@ -75,6 +73,7 @@ task:
seconds: 60
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_CONTEXT_NAME" value="log"/>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="logs/${LOG_CONTEXT_NAME}" />
<!-- 定义日志上下文的名称 -->
<contextName>${LOG_CONTEXT_NAME}</contextName>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- &lt;!&ndash;格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符&ndash;&gt;-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 输出到控制台-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--info日志统一输出到这里-->
<appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,按小时生成-->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/info/info.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符-->
<pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--错误日志统一输出到这里-->
<appender name="file.error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,按天生成-->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符-->
<pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录error级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--warn日志统一输出到这里-->
<appender name="file.warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warn/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 除按日志记录之外还配置了日志文件不能超过10M(默认)若超过10M日志文件会以索引0开始 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度 %method 方法名 %L 行数 %msg日志消息%n是换行符-->
<pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="file.error" />
<appender-ref ref="file.info" />
<appender-ref ref="file.warn" />
</root>
</configuration>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.emergencyrap.mapper.LogsMapper">
<!--添加日志数据-->
<insert id="addLogs">
insert into tb_logs(id,task_id,status,err_reason,err_id,create_time )values
(#{id},#{taskId},#{status},#{message},#{errId},#{createTime})
</insert>
</mapper>