修改Kafka服务日志输出目录不生效排查过程

背景:kafka的服务日志输出要求不能放在系统盘(空间比较小) 

操作:本能的修改log4j.properties的日志输出,如图:

结果重启服务后发现未生效,日志还是输出到当前目录的logs中
猜测:设置的变量kafka.logs.dir未生效,那这个变量哪里来的呢?看下启动脚本

验证
1、查看kafka启动脚本 kafka-server-start.sh, 其实真正的启动类是:

if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then

    export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"

fi


exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"

2、继续查看kafka-run-class.sh,简要代码摘录如下:

base_dir=$(dirname $0)/..

# Log directory to use

if [ "x$LOG_DIR" = "x" ]; then

  LOG_DIR="$base_dir/logs" #这里才是问题真正的原因

fi

 

# Log4j settings

if [ -z "$KAFKA_LOG4J_OPTS" ]; then

  # Log to console. This is a tool.

  LOG4J_DIR="$base_dir/config/tools-log4j.properties"

  # If Cygwin is detected, LOG4J_DIR is converted to Windows format.

  (( CYGWIN )) && LOG4J_DIR=$(cygpath --path --mixed "${LOG4J_DIR}")

  KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:${LOG4J_DIR}"

else

  # create logs directory

  if [ ! -d "$LOG_DIR" ]; then

    mkdir -p "$LOG_DIR"

  fi

fi

KAFKA_LOG4J_OPTS="-Dkafka.logs.dir=$LOG_DIR $KAFKA_LOG4J_OPTS"

 

3、到这里就能解释了kafka.logs.dir为什么设置未生效的问题
 

解决办法:在kafka-run-class.sh的头部添加   LOG_DIR=/data/kafka_logs 即可。

 

其他补充:需要提前创建好目录并赋权
for i in `cat kafka`;do ssh -p2208  $i "sudo mkdir -p /data/kafka_logs;sudo chown -R master:master /data/kafka_logs" ;done;

 

总结:源码面前没有秘密,需学会溯源,从现象到本质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值