Description
Before Creating the Bug Report
-
I found a bug, not just asking a question, which should be created in GitHub Discussions.
-
I have searched the GitHub Issues and GitHub Discussions of this repository and believe that this is not a duplicate.
-
I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ.
Runtime platform environment
centos7
RocketMQ version
5.3.3
JDK Version
open-jdk 17.0.0.1
Describe the Bug
已修改了日志配置文件中的记录位置并且启动脚本也修改了-Drmq.logback.configurationFile
为定义的日志配置,但是仍有一部分日志记录到了${user}.{home}
Steps to Reproduce
namesrv部分
# 备份默认日志配置
cp /usr/local/rocketmq/conf/rmq.namesrv.logback.xml /usr/local/rocketmq/conf/bk-rmq.namesrv.logback.xml
# 编辑日志配置
vi /usr/local/rocketmq/conf/rmq.namesrv.logback.xml
# 修改所有配置,附件有完整配置,github不支持xml所为txt上传
<!-- 修改所有appender的file属性和rollingPolicy的fileNamePattern属性,替换为独立路径 /data/rocketmq/logs/***.log -->
# 创建配置文件
cat > /usr/local/rocketmq/conf/namesrv.properties << EOF
# 开启内置controller
enableControllerInNamesrv=true
# DLedger Raft Group名字
controllerDLegerGroup=OpVrf
# DLedgerGroup内节点的地址信息
controllerDLegerPeers=n0-192.168.207.37:9877;n1-192.168.207.38:9877;n2-192.168.207.39:9877
# 节点 id,必须属于 controllerDLegerPeers 中的一个;同 Group 内各个节点要唯一。
controllerDLegerSelfId=n0
# controller日志存储位置,非常重要不能删除
controllerStorePath=/data/rocketmq/namesrv
# 存储路径
storePathRootDir=/data/rocketmq/namesrv
EOF
日志配置文件:
rmq.namesrv.logback.txt
broker部署
# 复制日志配置
cp /usr/local/rocketmq/conf/rmq.broker.logback.xml /usr/local/rocketmq/conf/rmq.broker-c-m.logback.xml
vi /usr/local/rocketmq/conf/rmq.broker-a-m.logback.xml
# 附件有完整内容,github不支持xml所为txt上传
# <!-- 修改所有appender的file属性和rollingPolicy的fileNamePattern属性,替换为独立路径 /data/rocketmq/logs/broker-a-m/***.log -->
# 配置
cat > /usr/local/rocketmq/conf/broker-a-m.properties << EOF
# Broker名称(主从必须一致)
brokerName=broker-a
# Broker ID(0表示主,>0表示从)
brokerId=0
# Broker IP(必填,否则可能绑定错误IP)
brokerIP1=192.168.207.37
# Broker角色
brokerRole=ASYNC_MASTER
# 监听端口
listenPort=10911
# 集群名称
brokerClusterName=RocketMQCluster
# 存储路径
storePathRootDir=/data/rocketmq/store/broker-a-m
storePathCommitLog=/data/rocketmq/store/broker-a-m/commitlog
storePathConsumeQueue=/data/rocketmq/store/broker-a-m/consumequeue
storePathIndex=/data/rocketmq/store/broker-a-m/index
storePathEpochFile=/data/rocketmq/store/broker-a-m/epoch
# NameServer地址(集群模式)
namesrvAddr=192.168.207.37:9876;192.168.207.38:9876;192.168.207.39:9876
# 开启Broker controller模式
enableControllerMode=true
# contoller地址
controllerAddr=192.168.207.37:9877;192.168.207.38:9877;192.168.207.39:9877
# Broker和controller之间心跳超时时间,心跳超过该时间判断Broker不在线。
controllerHeartBeatTimeoutMills=30000
# 刷盘策略
flushDiskType=ASYNC_FLUSH
# CommitLog文件大小(1GB)
mapedFileSizeCommitLog=1073741824
# ConsumeQueue文件大小(30W条)
mapedFileSizeConsumeQueue=300000
# 消息保留时间(小时)
fileReservedTime=168 # 7天
# 删除时间点(凌晨4点)
deleteWhen=04
# 定时刷盘间隔(毫秒,仅ASYNC_FLUSH有效)
flushIntervalCommitLog=500
# 堆外内存缓存大小(MB)
transientStorePoolSize=512
# 启用堆外内存缓存
useTransientStorePool=true
# 发送线程池大小
sendMessageThreadPoolNums=8
# 拉取线程池大小
pullMessageThreadPoolNums=16
# 最大客户端连接数
maxClientConnection=10000
EOF
日志配置文件:
rmq.broker-a-m.logback.txt
修改mqbroker脚本支持传递日志配置参数
# 备份原脚本
cp /usr/local/rocketmq/bin/mqbroker /usr/local/rocketmq/bin/mqbroker.bk
# 打开编辑
vi /usr/local/rocketmq/bin/mqbroker
# 把export ROCKETMQ_HOME行以下的部分修改为以下内容
# ========== 新增参数解析逻辑 ==========
export ROCKETMQ_HOME
# ======== 新增日志配置参数解析 ========
LOG_CONF=""
other_args=" "
enable_proxy=false
while [ $# -gt 0 ]; do
case $1 in
--enable-proxy)
enable_proxy=true
shift
;;
-c|--configFile)
broker_config="$2"
shift 2
;;
-l|--logConfig)
LOG_CONF="$2"
shift 2
;;
*)
other_args=${other_args}" "${1}
shift
;;
esac
done
# ======== 设置默认日志配置 ========
if [ -z "$LOG_CONF" ]; then
if [ "$enable_proxy" = true ]; then
LOG_CONF="$ROCKETMQ_HOME/conf/rmq.proxy.logback.xml"
else
LOG_CONF="$ROCKETMQ_HOME/conf/rmq.broker.logback.xml"
fi
fi
# ======== 验证配置文件存在 ========
if [ ! -f "$LOG_CONF" ]; then
echo "WARNING: Logback config file not found: $LOG_CONF" >&2
echo "Using default configuration instead." >&2
fi
# ======== 启动命令 ========
if [ "$enable_proxy" = true ]; then
args_for_proxy=$other_args" -pm local"
if [ "$broker_config" != "" ]; then
args_for_proxy=${args_for_proxy}" -bc "${broker_config}
fi
sh ${ROCKETMQ_HOME}/bin/runbroker.sh \
-Drmq.logback.configurationFile="$LOG_CONF" \
org.apache.rocketmq.proxy.ProxyStartup ${args_for_proxy}
else
args_for_broker=$other_args
if [ "$broker_config" != "" ]; then
args_for_broker=${args_for_broker}" -c "${broker_config}
fi
sh ${ROCKETMQ_HOME}/bin/runbroker.sh \
-Drmq.logback.configurationFile="$LOG_CONF" \
org.apache.rocketmq.broker.BrokerStartup ${args_for_broker}
fi
启动
# namvsrv
nohup env JAVA_OPT_EXT="-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g" \
/usr/local/rocketmq/bin/mqnamesrv -c /usr/local/rocketmq/conf/namesrv.properties \
> /data/rocketmq/logs/namesrv.log 2> /data/rocketmq/logs/namesrv.error &
# broker
nohup env JAVA_OPT_EXT="-Xms2g -Xmx3g -XX:MaxDirectMemorySize=3g" \
bin/mqbroker -c /usr/local/rocketmq/conf/broker-c-m.properties \
-l /usr/local/rocketmq/conf/rmq.broker-a-m.logback.xm \
> /data/rocketmq/logs/broker-a-m.log 2> /data/rocketmq/logs/broker-a-m.error &
# 查看进行引用配置
ps -axu|grep rocketmq
测试
/usr/local/rocketmq/bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
查看日志位置
ls -lsa /data/rocketmq/logs/broker-a-m/*
ls -lsa /root/logs/rocketmqlogs/*
What Did You Expect to See?
所有日志在/data/rocketmq/logs/broker-a-m/和/data/rocketmq/logs/目录下
What Did You See Instead?
有一部分日志仍然记录在了默认位置的${user.home}${file.separator}logs${file.separator}rocketmqlogs${brokerLogDir:-${file.separator}}${brokerContainerLogDir}${file.separator}
下,即/root/logs/rocketmqlogs/
下
Additional Context
我不能完全确定是BUG,但我认为我已经做了所有需要的配置