1. 程式人生 > 其它 >使用 Docker 部署 RabbitMQ 沒有日誌?新增這兩條配置,輕鬆搞定

使用 Docker 部署 RabbitMQ 沒有日誌?新增這兩條配置,輕鬆搞定

技術標籤:RabbitMQDockerdockerrabbitmq訊息佇列

使用 Docker 部署完 RabbitMQ 服務,到 /var/log/rabbitmq 目錄下一看,空空如也,並沒有日誌檔案生成。

是沒有日誌嗎?並非如此,日誌都打在了標準輸出上。使用如下命令可以檢視:

# docker logs -f container_name

但平時運維的時候不可能這樣來看,太麻煩了。

這裡就有一個疑問了,為什麼打在了標準輸出上,而不是輸出到檔案呢?

RabbitMQ 有兩個配置來定義日誌輸出:

  • RABBITMQ_LOG_BASE:日誌檔案輸出路徑
  • RABBITMQ_LOGS:具體的日誌檔案

而在 Docker 中又有些不同,在 Github 上檢視原始碼可以看到下面一段程式碼:

# If $RABBITMQ_LOGS is '-', send all log messages to stdout. This is
# particularly useful for Docker images.

if [ "$RABBITMQ_LOGS" = '-' ]; then
    SASL_ERROR_LOGGER=tty
    RABBIT_LAGER_HANDLER=tty
    RABBITMQ_LAGER_HANDLER_UPGRADE=tty
else
SASL_ERROR_LOGGER=false RABBIT_LAGER_HANDLER='"'${RABBITMQ_LOGS}'"' RABBITMQ_LAGER_HANDLER_UPGRADE='"'${RABBITMQ_UPGRADE_LOG}'"' fi

意思是 RABBITMQ_LOGS 如果配置成了 -,日誌就會輸出到標準輸出。

到我的容器中列印一看,也的確如此。

# docker exec -it rabbitmq /bin/bash
bash-5.0# echo $RABBITMQ_LOGS
-
bash-5.0#

原因搞清楚之後,解決起來就簡單了,只要在 docker-compose 檔案中新增兩項配置即可。

version: '2'

services:
  rabbitmq:
    container_name: rabbitmq
    image: rabbitmq:3.7-management-alpine
    restart: always
    environment:
      - RABBITMQ_DEFAULT_USER=username
      - RABBITMQ_DEFAULT_PASS=password
      - RABBITMQ_LOGS=
      - RABBITMQ_LOG_BASE=/var/log/rabbitmq
    volumes:
      - /var/log/rabbitmq:/var/log/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"

RABBITMQ_LOGS 引數可以直接留空,重啟服務之後,就有日誌檔案了。

原始碼連結:

https://github.com/rabbitmq/rabbitmq-server/blob/v3.7.26/scripts/rabbitmq-server

參考文件:

https://blog.csdn.net/fvdfsdafdsafs/article/details/110097643