我是用的 dockercompose 部署的,每次 docker up 都会重新创建镜像,日志自然也删除了。
项目的启动命令是:node server.js , 这种情况下,有什么简单的日志持久化的方法啊。
1
linzhe141 263 天前
volumes:
- ./log:/app/log |
2
AlicFeng 263 天前
EFK
|
3
Gooon 263 天前
grafana loki promtail
|
4
Gooon 263 天前
或者可以直接走 docker 的 log-driver 到 loki
|
5
Cola98 263 天前
用一楼老哥的方法,你挂一个 volume 持久化到本地就可以了
|
6
Trim21 263 天前
装个 loki ,应用直接把日志打到 stdout ,用 docker 的 loki 插件把 stdout 的日志转发到 loki 就行了
|
7
ZnductR0MjHvjRQ3 263 天前
你日志放容器肯定不行吧 怎么说也应该挪到外面
|
8
zhufpy 263 天前
挂在出来呗
|
9
wheat0r 263 天前
你甚至可以在容器里配置 rsyslog 向 syslog 服务器发送日志,通过环境变量把服务器地址传进容器
|
10
dudubaba 262 天前
服务器是房子,镜像是人,日志是家具,人走了不可能带走家具吧?家具肯定还在房子里。所以日志放服务器上,具体怎么放,搜 docker volumes
|
11
rizon OP |
12
anubu 262 天前
如果是为了控制台能查看日志并保存到文件持久化,可以简单使用 tee 命令。node server.js 2>&1 | tee app.log
|
13
rocmax 262 天前
导入一个 log 库,想传哪就传哪
比如[pino]( https://github.com/pinojs/pino) |
14
rizon OP |
15
ke1e 262 天前 via Android
Docker 的部署启动的项目,无论 Java nodejs 啥的,日志直接打印到控制台,有专门收集 Docker 日志的工具,像 Vector( https://vector.dev/docs/reference/configuration/sources/docker_logs/),你所需要做的就是把这种日志收集工具按你的需求配置好就行了,很简单的,对项目无侵入
|
17
momocraft 262 天前
你已经在用容器了, "让 nextjs 多写一份 log 到文件" 属于自己创造问题
正确途径是学习使用 docker logging driver 然后把 log 流到专门接收 log 的东西, 比如我自己在用的 fluent-bit 有了这种东西多保存一份到文件也可以, 再转发到别的 log 存储也可以 |
18
liuhai233 262 天前
fluentd 这种就行了,无论是 k8s 还是 docker 都有主流日志收集方案
|
19
jalena 262 天前
docker 不是默认会按 json-log 的形式把它写入到文件么~~
`docker inspect mysql | grep 'LogPath'` |
20
rocmax 262 天前 via Android
实际上使用 log 库才是最佳实践,因为 console.log 是同步的,性能损耗较大。可以搜一下有不少 benchmark 结果。
> Due to Node's single-threaded event-loop, it's highly recommended that sending, alert triggering, reformatting, and all forms of log processing are conducted in a separate process or thread. |
22
dudubaba 262 天前
@rizon nestjs 用的比较多的是这个 https://www.npmjs.com/package/winston ,搜一下有很多集成案例。
|
25
rocmax 262 天前 via Android
@rizon Winston 是老牌 log 库了,服务器端使用没问题。
nextjs 使用的话有一个问题是 Winston 依赖于 node 环境,nextjs 的 middleware 运行在 edge 环境 |
26
rizon OP @rocmax #25 我是自己服务器托管运行的,倒是没有这个问题,但是你这到提醒我了,nextjs 项目里还有跑在客户端的代码,我日志配置起来有些麻烦,还要分开服务端和客户端写代码,一不小心就写错了。 所以该日志库似乎也不是个好的方案
|
27
rocmax 262 天前 via Android 1
|
28
myon 261 天前
用 pm2 启服务,docker 映射 pm2 日志目录
|