Skip to content

[Bug] 不能根据配置的路径将日志记录到正确位置 #9519

Open
@selway

Description

@selway

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

Image

测试

/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/
Image

Additional Context

我不能完全确定是BUG,但我认为我已经做了所有需要的配置

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions