当 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 日志记录级别是信息,因此不显示错误日志。
要覆盖日志记录级别,请转至
- 设置
- Docker 引擎
- 添加
"logging": "fatal"
- 应用并重启
- 删除受影响的容器
- 通过 Dockerfile 或 docker-compose
重建它
错误日志应该可以显示。
P.S。 docker GUI 中的日志记录级别是(“调试”|“信息”|“警告”|“错误”|“致命”)(默认“信息”)
来自 Docker 设置日志记录级别后的 GUI 图像:
https://i.imgur.com/ig6KW6T.png
方式 02:
通过 command
在 docker-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。现在我的问题解决了。错误消息再次显示,不需要任何新配置
我为我的 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 日志记录级别是信息,因此不显示错误日志。
要覆盖日志记录级别,请转至
- 设置
- Docker 引擎
- 添加
"logging": "fatal"
- 应用并重启
- 删除受影响的容器
- 通过 Dockerfile 或 docker-compose 重建它
错误日志应该可以显示。
P.S。 docker GUI 中的日志记录级别是(“调试”|“信息”|“警告”|“错误”|“致命”)(默认“信息”)
来自 Docker 设置日志记录级别后的 GUI 图像: https://i.imgur.com/ig6KW6T.png
方式 02:
通过 command
在 docker-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。现在我的问题解决了。错误消息再次显示,不需要任何新配置