使用moleculer + docker的文件日志不会在文件系统中写入任何文件

toiithl6  于 2023-01-20  发布在  Docker
关注(0)|答案(2)|浏览(129)

我得到了这个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'

我得到了这个moleculer文件配置:

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}"
        }
    },
],
...

当我用可视化代码或直接在系统中使用node启动moleculer runner时,“this.logger”对象工作得很好,它不使用控制台日志,只使用文件日志。但是当我在docker中使用这个对象时,当我的配置文件说要执行wat控制台时,进程使用控制台日志,并且在docker执行中没有文件写入。
这是我的Dockfile。
Moleculer文件的其余属性工作得很完美(是的,应用程序使用了那个Moleculer配置文件)。

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"]
avwztpqn

avwztpqn1#

这个问题我已经纠结了几个小时了,即使这个问题很老,我也没有找到一个足够完整的答案。正如ZhuRong所说,您将环境变量LOGGER设置为某个值,可能是真的。简短的答案是,删除docker-compose.env中的这几行

LOGGER=true
LOGLEVEL=info

moleculer init命令默认生成docker文件,其中有一个带有环境变量docker-compose.env的文件,该文件在docker-compose.yml文件中引用。在生成的env文件中,环境变量LOGGER默认设置为true。这使得moleculer contanters使用docker内部日志记录器,并停用代理在moleculer-config.js中设置的任何日志记录器。
请记住,这些文件将在container中生成。正如您所做的那样,您必须配置一个docker卷来将更改保存在服务容器之外。

2mbi3lxu

2mbi3lxu2#

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

相关问题