feat: 日志目录使用INSTANCE_NAME区分多实例

问题:多实例部署时,APP_NAME相同导致日志互相覆盖
- 实例1: fund-sys (普通租户)
- 实例2: fund-sys-vip (VIP租户)
- 日志都写入 /datacfs/applogs/fund-sys/ 

修改:
- start.sh:
  - 添加 -Dapp.instance.name=${INSTANCE_NAME} 参数
  - 日志目录改为 ${LOG_HOME}/${INSTANCE_NAME}
- logback-spring.xml (9个服务):
  - APP_NAME source改为 app.instance.name
  - 默认值保持服务名用于fallback

效果:
- 实例1: /datacfs/applogs/fund-sys/info.log
- 实例2: /datacfs/applogs/fund-sys-vip/info.log 
This commit is contained in:
zhangjf 2026-02-22 21:14:48 +08:00
parent 480bd796f4
commit 69556c047a
10 changed files with 32 additions and 22 deletions

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-cust"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-cust"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-exp"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-exp"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-file"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-file"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-gateway"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-gateway"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-proj"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-proj"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-receipt"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-receipt"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-report"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-report"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-req"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-req"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -2,11 +2,12 @@
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从环境变量/系统属性读取配置 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="fund-sys"/>
<!-- APP_NAME使用INSTANCE_NAME区分多实例 -->
<springProperty scope="context" name="APP_NAME" source="app.instance.name" defaultValue="fund-sys"/>
<springProperty scope="context" name="LOG_PATH" source="logging.file.path" defaultValue="/datacfs/applogs"/>
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="logging.level.root" defaultValue="INFO"/>
<springProperty scope="context" name="LOG_LEVEL_APP" source="logging.level.app" defaultValue="DEBUG"/>
<!-- 日志格式直接配置不从参数读取避免shell解析问题 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-}][%X{spanId:-}] %-5level %logger{50} - %msg%n"/>

View File

@ -59,8 +59,9 @@ PID_FILE="${APP_HOME}/${INSTANCE_NAME}.pid"
# JVM参数可通过环境变量覆盖
JAVA_OPTS="${JAVA_OPTS:--Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200}"
# 日志目录参数(其他日志配置在application.yml/logback-spring.xml中
# 日志目录参数(使用INSTANCE_NAME区分实例
LOG_OPTS="-Dlogging.file.path=${LOG_HOME}"
LOG_OPTS="$LOG_OPTS -Dapp.instance.name=${INSTANCE_NAME}"
# 多租户参数
TENANT_OPTS=""
@ -77,8 +78,8 @@ if [ -f "$PID_FILE" ]; then
fi
fi
# 创建日志目录
mkdir -p ${LOG_HOME}
# 创建日志目录使用INSTANCE_NAME区分实例
mkdir -p ${LOG_HOME}/${INSTANCE_NAME}
# 启动服务
echo "Starting ${INSTANCE_NAME}..."
@ -94,7 +95,7 @@ if [ -n "${TENANT_ID}" ]; then
fi
# 启动命令java -cp lib/*:conf MainClass
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -cp "$CLASSPATH" $MAIN_CLASS > /dev/null 2>&1 &
nohup java $JAVA_OPTS $LOG_OPTS $TENANT_OPTS -cp "$CLASSPATH" $MAIN_CLASS >${LOG_HOME}/${INSTANCE_NAME}/stdout.log 2>&1 &
# 保存PID
echo $! > $PID_FILE