fix:docker版本

This commit is contained in:
PhoenixHai
2025-11-12 18:24:29 +08:00
parent 3214fd4525
commit 81cbb69237
5 changed files with 229 additions and 223 deletions
+4 -3
View File
@@ -33,7 +33,8 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
CMD curl -f http://localhost:9092/actuator/health || exit 1
# 预创建日志目录
RUN mkdir -p /app/logs
RUN mkdir -p /app/logs /app/logs/global /app/logs/api /app/logs/tcp /app/logs/mqtt
# 启动命令:创建日志目录,执行脚本后台启动,再跟随实际项目日志保持前台
ENTRYPOINT ["sh", "-c", "mkdir -p /app/logs && cn-universal-web/bin/start.sh && tail -F /app/logs/cn-universal-web.log"]
# 启动命令:创建日志目录,执行启动脚本,前台跟随 info.log 保持容器存活
ENTRYPOINT ["sh", "-c", "mkdir -p /app/logs && /app/cn-universal-web/bin/start.sh && tail -F /app/logs/info.log"]
ENTRYPOINT ["sh", "-c", "mkdir -p /app/logs /app/logs/global /app/logs/api /app/logs/tcp /app/logs/mqtt && touch /app/logs/cn-universal-web.log /app/logs/all.log /app/logs/global/info.log /app/logs/global/warn.log /app/logs/global/error.log && cn-universal-web/bin/start.sh && tail -n +1 -F /app/logs/all.log /app/logs/cn-universal-web.log /app/logs/global/info.log /app/logs/global/warn.log /app/logs/global/error.log"]
+1 -1
View File
@@ -29,4 +29,4 @@ HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
RUN mkdir -p /app/logs
# 启动命令:创建日志目录,执行脚本后台启动,再跟随实际项目日志保持前台
ENTRYPOINT ["sh", "-c", "mkdir -p /app/logs && cn-universal-web/bin/start.sh && tail -F /app/logs/cn-universal-web.log"]
ENTRYPOINT ["sh", "-c", "mkdir -p /app/logs && cn-universal-web/bin/start.sh && tail -F /app/logs/info.log"]
@@ -1,239 +1,246 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="log.path" source="logging.file.path" defaultValue="./logs"/>
<shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>
<springProperty scope="context" name="log.path" source="logging.file.path" defaultValue="./logs"/>
<shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>
<!-- 日志格式定义 -->
<!-- 全局合并日志格式:增加模块标识,便于区分来源 -->
<property name="all.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%X{ctxId}] [%logger] %-5level - %msg%n"/>
<!-- 模块独立日志格式(保持原样) -->
<property name="module.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%X{ctxId}] %-5level - %msg%n"/>
<!-- 控制台和其他格式 -->
<property name="console.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger] %-5level - %msg%n"/>
<property name="global.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] %-5level %logger{30} - %msg%n"/>
<!-- 日志格式定义 -->
<!-- 全局合并日志格式:增加模块标识,便于区分来源 -->
<property name="all.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%X{ctxId}] [%logger] %-5level - %msg%n"/>
<!-- 模块独立日志格式(保持原样) -->
<property name="module.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%X{ctxId}] %-5level - %msg%n"/>
<!-- 控制台和其他格式 -->
<property name="console.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] [%logger] %-5level - %msg%n"/>
<property name="global.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] %-5level %logger{30} - %msg%n"/>
<!-- 1. 全局合并日志(汇总所有日志) -->
<appender name="ALL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/all.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/all.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>1GB</maxFileSize> <!-- 合并日志可适当放大 -->
<maxHistory>15</maxHistory> <!-- 保留15天,避免过大 -->
</rollingPolicy>
<encoder>
<pattern>${all.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level> <!-- 合并日志默认输出INFO及以上 -->
</filter>
</appender>
<!-- 1. 全局合并日志(汇总所有日志) -->
<appender name="ALL_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>1GB</maxFileSize> <!-- 合并日志可适当放大 -->
<maxHistory>15</maxHistory> <!-- 保留15天,避免过大 -->
</rollingPolicy>
<encoder>
<pattern>${all.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level> <!-- 合并日志默认输出INFO及以上 -->
</filter>
</appender>
<!-- 2. 全局非模块日志(按级别拆分) -->
<appender name="GLOBAL_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/global/info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/global/info.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${global.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="GLOBAL_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/warn.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${global.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="GLOBAL_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/global/warn.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/global/warn.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${global.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="GLOBAL_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${global.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="GLOBAL_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/global/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/global/error.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${global.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 3. 模块独立日志 -->
<appender name="API_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/api.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/api.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 3. 模块独立日志 -->
<appender name="API_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/api/api.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/api/api.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="TCP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/tcp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/tcp.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="TCP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/tcp/tcp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/tcp/tcp.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="MQTT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/mqtt.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/mqtt.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="MQTT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/mqtt/mqtt.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.path}/mqtt/mqtt.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${module.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 4. 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 4. 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${console.pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 开发环境(dev) -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<!-- 开发环境(dev) -->
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_INFO"/>
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<!-- 模块日志:输出到独立文件 + 合并日志 + 控制台 -->
<logger name="api" level="DEBUG" additivity="true"> <!-- additivity=true:允许继承root的appender(含ALL_LOG) -->
<appender-ref ref="API_LOG"/> <!-- 独立文件 -->
</logger>
<logger name="tcp" level="DEBUG" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="DEBUG" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<!-- 模块日志:输出到独立文件 + 合并日志 + 控制台 -->
<logger name="api" level="DEBUG"
additivity="true"> <!-- additivity=true:允许继承root的appender(含ALL_LOG) -->
<appender-ref ref="API_LOG"/> <!-- 独立文件 -->
</logger>
<logger name="tcp" level="DEBUG" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="DEBUG" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<logger name="org.springframework" level="WARN"/>
<logger name="cn.hutool" level="INFO"/>
<!-- MyBatis SQL日志 -->
<logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_LOG"/>
</logger>
</springProfile>
<logger name="org.springframework" level="WARN"/>
<logger name="cn.hutool" level="INFO"/>
<!-- 测试环境(huo) -->
<springProfile name="test,test2,huo">
<root level="INFO">
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<!-- MyBatis SQL日志 -->
<logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ALL_LOG"/>
</logger>
</springProfile>
<!-- 模块日志:独立文件 + 合并日志 -->
<logger name="api" level="INFO" additivity="true">
<appender-ref ref="API_LOG"/>
</logger>
<logger name="tcp" level="INFO" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="INFO" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<!-- 测试环境(huo) -->
<springProfile name="test,test2,huo">
<root level="INFO">
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_INFO"/>
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<logger name="org.springframework" level="WARN"/>
<logger name="cn.hutool" level="WARN"/>
<!-- MyBatis SQL日志 -->
<logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">
<appender-ref ref="ALL_LOG"/>
</logger>
</springProfile>
<!-- 模块日志:独立文件 + 合并日志 -->
<logger name="api" level="INFO" additivity="true">
<appender-ref ref="API_LOG"/>
</logger>
<logger name="tcp" level="INFO" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="INFO" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<!-- 生产环境 -->
<springProfile name="prod,beta,out">
<root level="WARN">
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<logger name="org.springframework" level="WARN"/>
<logger name="cn.hutool" level="WARN"/>
<!-- 模块日志:独立文件 + 合并日志 -->
<logger name="api" level="INFO" additivity="true">
<appender-ref ref="API_LOG"/>
</logger>
<logger name="tcp" level="INFO" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="INFO" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<!-- MyBatis SQL日志 -->
<logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">
<appender-ref ref="ALL_LOG"/>
</logger>
</springProfile>
<logger name="org.springframework" level="ERROR"/>
<logger name="cn.hutool" level="ERROR"/>
<!-- MyBatis SQL日志(生产环境谨慎开启) -->
<!-- <logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="ALL_LOG"/>-->
<!-- </logger>-->
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod,beta,out">
<root level="WARN">
<appender-ref ref="ALL_LOG"/> <!-- 全局合并日志 -->
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
</root>
<!-- Docker 环境(容器内运行) -->
<springProfile name="docker">
<root level="INFO">
<appender-ref ref="ALL_LOG"/>
<appender-ref ref="GLOBAL_WARN"/>
<appender-ref ref="GLOBAL_ERROR"/>
<appender-ref ref="CONSOLE"/>
</root>
<!-- 模块日志:独立文件 + 合并日志 -->
<logger name="api" level="INFO" additivity="true">
<appender-ref ref="API_LOG"/>
</logger>
<logger name="tcp" level="INFO" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="INFO" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<!-- 模块日志:独立文件 + 合并日志 -->
<logger name="api" level="INFO" additivity="true">
<appender-ref ref="API_LOG"/>
</logger>
<logger name="tcp" level="INFO" additivity="true">
<appender-ref ref="TCP_LOG"/>
</logger>
<logger name="mqtt" level="INFO" additivity="true">
<appender-ref ref="MQTT_LOG"/>
</logger>
<logger name="org.springframework" level="ERROR"/>
<logger name="cn.hutool" level="ERROR"/>
<logger name="org.springframework" level="WARN"/>
<logger name="cn.hutool" level="WARN"/>
<!-- MyBatis SQL日志(生产环境谨慎开启) -->
<!-- <logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="ALL_LOG"/>-->
<!-- </logger>-->
</springProfile>
<!-- MyBatis SQL日志 -->
<logger name="cn.universal.persistence.mapper" level="DEBUG" additivity="false">
<appender-ref ref="ALL_LOG"/>
</logger>
</springProfile>
</configuration>
+1 -2
View File
@@ -22,10 +22,9 @@ services:
- MQTT_CFG_HOST_OUT=${MQTT_HOST_OUT:-tcp://127.0.0.1:1883}
- MQTT_CFG_EMQX_HEADER_KEY=${EMQX_HEADER_KEY:-universal-emqx}
- MQTT_CFG_EMQX_HEADER_VALUE=${EMQX_HEADER_VALUE:-d41d8cd98f00b204e9800998ecf8427e}
- SPRING_PROFILES_ACTIVE=docker
- SPRING_PROFILES_ACTIVE=docker,prod
- RUN_MODE=docker
- LOGGING_FILE_PATH=/app/logs
- LOGGING_FILE_NAME=/app/logs/cn-universal-web.log
- SERVER_PORT=9092
- SERVER_HTTP2_ENABLED=false
- JAVA_TOOL_OPTIONS=-Dio.netty.native.workdir=/app/logs
+1 -2
View File
@@ -36,8 +36,7 @@ services:
# 应用配置
- SPRING_PROFILES_ACTIVE=docker
- RUN_MODE=docker
- LOGGING_FILE_PATH=/app/logs/cn-universal2
- LOGGING_FILE_NAME=/app/logs/cn-universal-web.log
- LOGGING_FILE_PATH=/app/logs
- SERVER_PORT=9092
- SERVER_HTTP2_ENABLED=false
- JAVA_TOOL_OPTIONS=-Dio.netty.native.workdir=/app/logs