【问题标题】:Using file log with moleculer + docker does not write any file in the file system使用文件日志和分子 + docker 不会在文件系统中写入任何文件
【发布时间】:2021-10-31 07:33:48
【问题描述】:

我得到了这个 docker-compose 文件:

version: "3.3"

services:

  api:
    restart: always
    build:
      context: .
    image: foo-platform:1.0.0.0
    env_file: docker-compose-test.env
    environment:
      SERVICES: api,$node,foo-service
    labels:
      - "traefik.enable=false"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=8090"
    networks:
      - internal
    volumes:
      - logdata:/logs/moleculer
    ports:
      - "5680:5680"
      - "5683:5683"
      - "5684:5684"
      - "5685:5685"
      - "5686:5686"
      

networks:
  internal:

volumes:
  logdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/var/log/tdcp'

我得到了这个分子文件配置:

const brokerConfig: BrokerOptions = {
// Namespace of nodes to segment your nodes on the same network.
namespace: process.env.NAMESPACE,

// Unique node identifier. Must be unique in a namespace.
nodeID: null,

// Custom metadata store. Store here what you want. Accessing: `this.broker.metadata`
metadata: {},

// Enable/disable logging or use custom logger. More info: https://moleculer.services/docs/0.14/logging.html
// Available logger types: "Console", "File", "Pino", "Winston", "Bunyan", "debug", "Log4js", "Datadog"
logger: [
    //{
    //    type: "Console",
    //    options: {
    //        level: "info",
    //    }
    //},
    {             
        type: "File",
        options: {
            level: "info",
            folder: "/logs/moleculer",
            filename: "log-{date}.log",
            formatter: "{timestamp} {level} {nodeID}/{mod}: {msg}"
        }
    },
],
...

当我使用可视代码或直接在系统中使用节点启动分子运行器时,“this.logger”对象完美运行,它不使用控制台日志,仅使用文件日志。但是当我将它与 docker 一起使用时,当我的配置文件说 wat 控制台时,该进程使用控制台日志,并且在 docker 执行中没有写入任何文件。

这是我的 Dockfile。

分子文件的其余属性完美运行(是的,应用程序使用该分子配置文件)。

    FROM node:lts-alpine

# Working directory
WORKDIR /app

# Install dependencies
COPY package.json package-lock.json ./
RUN npm ci --silent

# Copy source
COPY . .

# Build and cleanup
ENV NODE_ENV=production
RUN npm run build \
 && npm prune \
 && mkdir -p /logs/moleculer \
 && touch /logs/moleculer/this_is_a_volumen

# Start server
CMD ["node", "./node_modules/moleculer/bin/moleculer-runner.js"]

【问题讨论】:

  • 快速猜测一下,docker-compose 绑定挂载 volumes: - logdata:/logs/moleculer 正在使用来自主机的空目录覆盖容器的日志目录。这就是绑定挂载的工作方式。您可以尝试将volumes: 注释掉,重新启动容器,然后使用docker exec -it <api-container-name> ls /logs/moleculer 查看日志文件吗?我怀疑你会看到日志。相关问答:stackoverflow.com/q/36107442/4161471stackoverflow.com/q/47664107/4161471
  • 不,我没有看到日志。我怎么说,在docker内部的“/logs/moleculer”中没有日志文件(只有在dockfile中为测试而创建的文件。因此,在docker之外,在主机操作系统中我看到/logs/moleculer下的文件(卷有效)。

标签: docker docker-compose moleculer


【解决方案1】:

尝试检查环境变量LOGGER。 如果将LOGGER设置为其他值,例如true,它将覆盖molerr.config.js文件中logger的值。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 2012-04-25
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多