首页 > 解决方案 > 当 Nest 从 Docker 容器启动时,NestJS 的 Logger.error() 不会输出任何内容

问题描述

我为我的 Nest 应用程序做了一个错误过滤器,它使用 logger.error() 输出我的错误对象。问题是 logger.error() 不起作用。我试图从多个位置调用 Logger,但没有任何效果。奇怪的是,其他选项(如详细和警告)工作得很好。

以这段代码为例:

    import { Logger } from '@nestjs/common'
    export class InstiController{
        constructor(private instiService: InstiService) {}
    
        private logger = new Logger('InstiController')
    
        @Get()
        foo(@GetLoggedUser() user: Usuarios) {
            this.logger.error('This is an error')
            this.logger.warn('This is a warning')
            this.logger.verbose('This is a verbose')
            return this.instiService.listUserInsti(user)
        }
    }

输出:

在此处输入图像描述

更新:当我直接启动 Nest(在 Docker 容器外)时,错误输出正确: 在此处输入图像描述

标签: nestjs

解决方案


默认的 docker GUI 日志记录级别是 info,因此不显示错误日志。

要覆盖日志记录级别,请转到

  1. 环境
  2. 码头引擎
  3. 添加"logging": "fatal"
  4. 应用并重新启动
  5. 移除受影响的容器
  6. 通过 Dockerfile 或 docker-compose 重建它

错误日志应该能够显示。

PS docker GUI 中的日志记录级别是 ("debug"|"info"|"warn"|"error"|"fatal") (默认 "info")

在此处输入图像描述

设置日志级别后来自 Docker GUI 的图像: https ://i.imgur.com/ig6KW6T.png


方式02:

虽然commanddocker-compose.yml.

然后,删除容器并使用 docker-compose up -d 重建它

...
services:
      xxx:
        build:
            context: .
            target: development
            dockerfile: ./Dockerfile
        command:
            - "--log.level=FATAL"
....


推荐阅读