提交 16c6d568 authored 作者: 吕本才's avatar 吕本才

Initial commit

上级
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- -->
<!-- <groupId>com.wangxiaolu.sfa</groupId>-->
<!-- <artifactId>wangxiaolu-link-module-fortune-hub</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<parent>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-parent</artifactId>
<version>0.0.1</version>
<!-- <relativePath/>-->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>wangxiaolu-link-module-fortune-hub</artifactId>
<version>0.0.1</version>
<name>wangxiaolu-link-module-fortune-hub</name>
<description>wangxiaolu-link-fortune-hub 小卤财运补给站,对接小程序财运补给站小程序和后端管理</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud Alibaba Sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringBoot Actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- RuoYi Common DataSource -->
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-common-datasource</artifactId>
</dependency>
<!-- RuoYi Common DataScope -->
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-common-datascope</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-common-log</artifactId>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-common-swagger</artifactId>
</dependency>
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-api-system</artifactId>
</dependency>
<dependency>
<groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-common-redis</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.link.hub;
import com.sfa.common.security.annotation.EnableCustomConfig;
import com.sfa.common.security.annotation.EnableRyFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCustomConfig
@EnableRyFeignClients
@MapperScan("com.link.hub.domain.**.mapper")
@SpringBootApplication
public class WangxiaoluLinkModuleFortuneHubApplication {
public static void main(String[] args) {
SpringApplication.run(WangxiaoluLinkModuleFortuneHubApplication.class, args);
}
}
package com.link.hub.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 微信小程序配置
*
* @author : lvbencai
* @date : 2025-12-05
* @describe :
*/
@ConfigurationProperties(prefix = "mini.program")
@Data
@Component
//@ConfigurationProperties(prefix = "wangdiantong")
public class WeChatMiniProgramConfig {
private String appId;
private String appSecret;
}
package com.link.hub.controller.weChatMiniProgram.query;
import com.link.hub.pojo.weChatMiniProgram.vo.MiniProgramOpenIdVO;
import com.link.hub.service.weChatMiniProgram.WechatMiniProgramService;
import com.sfa.common.core.domain.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author : liqiulin
* @date : 2025-03-07 13
* @describe :
*/
@RestController
@RequestMapping("/miniProgram")
public class WechatMiniProgramController {
@Resource
private WechatMiniProgramService wechatMiniProgramService;
@GetMapping("/getUserInfo")
public R getUserInfo(String code) {
MiniProgramOpenIdVO userInfo = wechatMiniProgramService.getUserInfo(code);
return R.ok(userInfo);
}
}
package com.link.hub.domain.weChatMiniProgram.dao;
public interface WechatMiniProgramUserDao {
}
package com.link.hub.domain.weChatMiniProgram.dao.impl;
import com.link.hub.domain.weChatMiniProgram.dao.WechatMiniProgramUserDao;
import com.link.hub.domain.weChatMiniProgram.mapper.WechatMiniProgramUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
/**
* @author : liqiulin
* @date : 2024-11-22 16
* @describe :
*/
@Repository
public class WechatMiniProgramUserDaoImpl implements WechatMiniProgramUserDao {
@Autowired
WechatMiniProgramUserMapper wechatMiniProgramUserMapper;
}
package com.link.hub.domain.weChatMiniProgram.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 微信小程序用户表 POJO/PO
* 对应表:wechat_mini_program_user
*/
@Data
@TableName("wechat_mini_program_user")
public class WechatMiniProgramUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 小程序用户唯一标识
*/
@TableField("openid")
private String openid;
/**
* 微信开放平台统一标识
*/
@TableField("unionid")
private String unionid;
/**
* 用户昵称
*/
@TableField("nickname")
private String nickname;
/**
* 用户头像URL
*/
@TableField("avatar_url")
private String avatarUrl;
/**
* 性别:0-未知,1-男,2-女
*/
@TableField("sex")
private Integer sex;
/**
* 用户手机号(脱敏存储)
*/
@TableField("phone")
private String phone;
/**
* 用户所在国家
*/
@TableField("country")
private String country;
/**
* 用户所在省份
*/
@TableField("province")
private String province;
/**
* 用户所在城市
*/
@TableField("city")
private String city;
/**
* 用户首次进入小程序时间
*/
@TableField("register_time")
private Date registerTime;
/**
* 用户最后登录小程序时间
*/
@TableField("last_login_time")
private Date lastLoginTime;
/**
* 是否禁用:0-正常,1-禁用
*/
@TableField("is_disabled")
private Integer isDisabled;
/**
* 记录创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
* 记录更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
package com.link.hub.domain.weChatMiniProgram.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WechatMiniProgramUserMapper {
}
package com.link.hub.domain.weChatOfficialAccount.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 微信公众号用户表 POJO/PO
* 对应表:wechat_official_account_user
*/
@Data // Lombok注解:自动生成get/set/toString/equals/hashCode
@TableName("wechat_official_account_user") // MyBatis-Plus绑定数据库表名
public class WechatOfficialAccountUser implements Serializable {
private static final long serialVersionUID = 1L; // 序列化版本号
/**
* 主键ID
*/
@TableId(type = IdType.AUTO) // 主键自增,匹配MySQL的AUTO_INCREMENT
private Long id;
/**
* 公众号用户唯一标识
*/
@TableField("openid") // 字段映射(若驼峰匹配可省略,此处显式标注更清晰)
private String openid;
/**
* 微信开放平台统一标识
*/
@TableField("unionid")
private String unionid;
/**
* 用户昵称
*/
@TableField("nickname")
private String nickname;
/**
* 用户头像URL
*/
@TableField("avatar_url")
private String avatarUrl;
/**
* 性别:0-未知,1-男,2-女
*/
@TableField("sex")
private Integer sex;
/**
* 关注状态:1-已关注,0-已取消关注
*/
@TableField("subscribe_status")
private Integer subscribeStatus;
/**
* 关注时间
*/
@TableField("subscribe_time")
private Date subscribeTime;
/**
* 取消关注时间
*/
@TableField("unsubscribe_time")
private Date unsubscribeTime;
/**
* 公众号运营者给用户的备注
*/
@TableField("remark")
private String remark;
/**
* 用户所在国家
*/
@TableField("country")
private String country;
/**
* 用户所在省份
*/
@TableField("province")
private String province;
/**
* 用户所在城市
*/
@TableField("city")
private String city;
/**
* 用户语言(zh-CN/zh-TW/en等)
*/
@TableField("language")
private String language;
/**
* 记录创建时间(MySQL默认CURRENT_TIMESTAMP)
*/
@TableField(value = "create_time", fill = FieldFill.INSERT) // 插入时自动填充
private Date createTime;
/**
* 记录更新时间(MySQL默认ON UPDATE CURRENT_TIMESTAMP)
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 插入/更新时自动填充
private Date updateTime;
}
package com.link.hub.pojo.weChatMiniProgram.vo;
import lombok.Data;
import java.util.Date;
@Data
public class MiniProgramOpenIdVO {
private String openid;
private String session_key;
private String unionid;
private Date subscribeTime;
private String token;
// private Boolean subscribeFlag =false;
}
package com.link.hub.service.weChatMiniProgram;
import com.link.hub.pojo.weChatMiniProgram.vo.MiniProgramOpenIdVO;
public interface WechatMiniProgramService {
MiniProgramOpenIdVO getUserInfo(String code);
}
package com.link.hub.service.weChatMiniProgram;
public interface WechatMiniProgramUserService {
}
package com.link.hub.service.weChatMiniProgram.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson2.JSONObject;
import com.link.hub.config.WeChatMiniProgramConfig;
import com.link.hub.pojo.weChatMiniProgram.vo.MiniProgramOpenIdVO;
import com.link.hub.service.weChatMiniProgram.WechatMiniProgramService;
import com.link.hub.service.weChatMiniProgram.WechatMiniProgramUserService;
import com.sfa.common.core.constant.SecurityConstants;
import com.sfa.common.core.utils.JwtUtils;
import com.sfa.common.core.utils.ip.IpUtils;
import com.sfa.common.core.utils.uuid.IdUtils;
import com.sfa.common.core.utils.wechat.TencentUtils;
import com.sfa.common.security.service.TokenService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* 小程序服务实现
*/
@Service
public class WechatMiniProgramServiceServiceImpl implements WechatMiniProgramService {
@Resource
private WeChatMiniProgramConfig weChatMiniProgramConfig;
@Resource
private WechatMiniProgramUserService miniProgramUserService;
@Resource
private TokenService tokenService;
@Value("${mini.program.jwt.expire:720}")
private Long expireTime;
@Override
public MiniProgramOpenIdVO getUserInfo(String code) {
JSONObject jsonObject = TencentUtils.getOpenid(code, weChatMiniProgramConfig.getAppId(), weChatMiniProgramConfig.getAppSecret());
// 从jsonObject中获取openid
String openid = jsonObject.getString("openid");
String unionid = jsonObject.getString("unionid");
// 返回结果
MiniProgramOpenIdVO miniProgramOpenIdVO = new MiniProgramOpenIdVO();
miniProgramOpenIdVO.setOpenid(openid);
miniProgramOpenIdVO.setUnionid(unionid);
// 查询是否关注了微信公众号
// miniProgramOpenIdVO.setSubscribeFlag(true);
miniProgramOpenIdVO.setSubscribeTime(DateUtil.date());
// 保存小程序用户信息
// String userId = miniProgramUserService.saveMiniProgramUser(openid);
LoginUser loginUser = new LoginUser();
String token = IdUtils.fastUUID();
Long userId = 1L;
String userName = "openid";
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
loginUser.setIpaddr(IpUtils.getIpAddr());
tokenService.saveToken(loginUser, expireTime);
// 返回token
Map<String, Object> claimsMap = new HashMap<String, Object>();
claimsMap.put(SecurityConstants.USER_KEY, token);
claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<String, Object>();
rspMap.put("access_token", JwtUtils.createToken(claimsMap));
rspMap.put("expires_in", expireTime);
loginUser.setLoginTime(System.currentTimeMillis());
miniProgramOpenIdVO.setToken(JwtUtils.createToken(claimsMap));
return miniProgramOpenIdVO;
}
}
package com.link.hub.service.weChatMiniProgram.impl;
import com.link.hub.service.weChatMiniProgram.WechatMiniProgramUserService;
import org.springframework.stereotype.Service;
/**
* 小程序用户服务实现
*/
@Service
public class WechatMiniProgramUserServiceServiceImpl implements WechatMiniProgramUserService {
}
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
group: sfa
namespace: 9fb64726-e415-43e4-9e79-9be8d2666671
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: sfa
namespace: 9fb64726-e415-43e4-9e79-9be8d2666671
spring:
cloud:
nacos:
discovery:
server-addr: 10.0.0.170:8848
group: sfa
namespace: e2996044-6ddc-4988-8810-602e05d01ccf
config:
server-addr: 10.0.0.170:8848
file-extension: yaml
group: sfa
namespace: e2996044-6ddc-4988-8810-602e05d01ccf
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
group: sfa
namespace: 24aed289-30a5-4e5c-8110-1b96281d1265
config:
server-addr: 192.168.100.38:8848
file-extension: yaml
group: sfa
namespace: 24aed289-30a5-4e5c-8110-1b96281d1265
spring:
profiles:
active: dev
application:
name: wangxiaolu-link-module-fortune-hub
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="APP_NAME" value="wangxiaolu-link-module-fortune-hub"/>
<property name="MODEL_NAME" value="fortune-hub"/>
<contextName>${APP_NAME}</contextName>
<!-- 日志存放路径 对应yml文件中spring.profiles.active配置-->
<springProfile name="dev">
<property name="LOG_PATH" value="./logs/${APP_NAME}" />
</springProfile>
<springProfile name="qa,live,master">
<property name="LOG_PATH" value="/var/logs/sfa/${APP_NAME}" />
</springProfile>
<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:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="errorFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-error-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-error-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
<!--
此日志文件只记录debug级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 控制台-->
<root level="INFO">
<appender-ref ref="console" />
</root>
<!-- 文件日志-->
<root level="INFO">
<appender-ref ref="rollingFile" />
<appender-ref ref="errorFile" />
</root>
</configuration>
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
group: sfa
namespace: 9fb64726-e415-43e4-9e79-9be8d2666671
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: sfa
namespace: 9fb64726-e415-43e4-9e79-9be8d2666671
spring:
cloud:
nacos:
discovery:
server-addr: 10.0.0.170:8848
group: sfa
namespace: e2996044-6ddc-4988-8810-602e05d01ccf
config:
server-addr: 10.0.0.170:8848
file-extension: yaml
group: sfa
namespace: e2996044-6ddc-4988-8810-602e05d01ccf
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
group: sfa
namespace: 24aed289-30a5-4e5c-8110-1b96281d1265
config:
server-addr: 192.168.100.38:8848
file-extension: yaml
group: sfa
namespace: 24aed289-30a5-4e5c-8110-1b96281d1265
spring:
profiles:
active: dev
application:
name: wangxiaolu-link-module-fortune-hub
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="APP_NAME" value="wangxiaolu-link-module-fortune-hub"/>
<property name="MODEL_NAME" value="fortune-hub"/>
<contextName>${APP_NAME}</contextName>
<!-- 日志存放路径 对应yml文件中spring.profiles.active配置-->
<springProfile name="dev">
<property name="LOG_PATH" value="./logs/${APP_NAME}" />
</springProfile>
<springProfile name="qa,live,master">
<property name="LOG_PATH" value="/var/logs/sfa/${APP_NAME}" />
</springProfile>
<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:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="errorFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-error-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-error-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
<!--
此日志文件只记录debug级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 控制台-->
<root level="INFO">
<appender-ref ref="console" />
</root>
<!-- 文件日志-->
<root level="INFO">
<appender-ref ref="rollingFile" />
<appender-ref ref="errorFile" />
</root>
</configuration>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论