当 Nest 从 Docker 容器启动时,NestJS 的 Logger.error() 不会输出任何内容

NestJS' Logger.error() won't output anything when Nest is started from a Docker container

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

以这段代码为例:

    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 容器之外)时,错误输出正确:

您可以尝试在引导时手动设置它。

const app = await NestFactory.create(AppModule, {
  logger: ['error', 'warn'],
});

数组中的值可以是 'log'、'error'、'warn'、'debug' 和 'verbose' 的任意组合。

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

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

  1. 设置
  2. Docker 引擎
  3. 添加"logging": "fatal"
  4. 应用并重启
  5. 删除受影响的容器
  6. 通过 Dockerfile 或 docker-compose
  7. 重建它

错误日志应该可以显示。

P.S。 docker GUI 中的日志记录级别是(“调试”|“信息”|“警告”|“错误”|“致命”)(默认“信息”)

来自 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"
....

@Mic Fung 解决方案在理论上应该可行,但它仍然对我不起作用。我注意到我的另一台计算机(使用 Docker Desktop 3.3.2 和 docker engine 20.10.5 可以正常显示错误日志)。

因此,我假设问题是 3.3.3 特有的,并将 Docker 桌面版更新为 3.4.0。现在我的问题解决了。错误消息再次显示,不需要任何新配置