我如何从日志文件而不是应用程序日志中输出日志
How do i output the logs from log file instead of application log
我在 Docker 中有一个 React 应用程序,在使用 Docker logs 命令时它显示这样的输出日志,即应用程序日志
NODE_ENV=production node ./build/server/index.js
2019-08-23T09:49:58.127Z - info: Application logs file: /root/.application.log
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
2019-08-23T09:49:58.192Z - info: HTTP server is now running on http://localhost:8080
我正在将实际日志写入名为 ui.log
的文件
06:51:32.021 INFO time="2019-08-23T06:51:32.021Z"
如何将此日志转发到 docker 日志中?
我在 Docker 文件
中尝试了这个命令 RUN ln -sf /dev/stdout /app/ui.log
但还是不行
您可以为此目的使用入口点,但请记住一件事,在这种情况下,npm
进程将 运行ning 在后台运行,拖尾日志文件将成为根目录进程 tail -f /root/applog.log
。
不建议在生产系统中使用,但您可以在开发中利用。
FROM node:alpine
COPY . /root
WORKDIR /root
RUN echo $'#!/bin/sh \n\
npm run start & \n\
sleep 2 # give testServer time to create the newest log \n\
exec tail -f /root/applog.log ' >> /entrypoint.sh
RUN chmod 755 /entrypoint.sh
EXPOSE 3000
ENTRYPOINT [ "/entrypoint.sh" ]
该入口点在后台启动 npm,然后 运行 使用 exec 执行尾部。 exec 替换 pid 1 以便信号通过。
您可以进一步 here 来处理尾部的 PID,但不要忘记检查第一个答案的评论,这在您的情况下不起作用。
但在 Docker 的上下文中,将日志写入文件毫无用处,因为 docker 应该 运行 并终止,而不是保留日志文件。
另一件事,例如,如果您使用 AWS fargate,您不需要管理服务器到 运行 容器,因此您永远不会访问该文件,所以在那个case writing log to file 永远帮不了你
我建议在 Docker 的上下文中将所有日志写入控制台日志。
这里有一个教程,你可以在 nodejs 中按照这个教程来处理日志。
winston-logging-tutorial and using-winston-a-versatile-logging-library-for-node-js
我在 Docker 中有一个 React 应用程序,在使用 Docker logs 命令时它显示这样的输出日志,即应用程序日志
NODE_ENV=production node ./build/server/index.js
2019-08-23T09:49:58.127Z - info: Application logs file: /root/.application.log Warning: connect.session() MemoryStore is not designed for a production environment, as it will leak memory, and will not scale past a single process. 2019-08-23T09:49:58.192Z - info: HTTP server is now running on http://localhost:8080
我正在将实际日志写入名为 ui.log
的文件06:51:32.021 INFO time="2019-08-23T06:51:32.021Z"
如何将此日志转发到 docker 日志中?
我在 Docker 文件
中尝试了这个命令RUN ln -sf /dev/stdout /app/ui.log
但还是不行
您可以为此目的使用入口点,但请记住一件事,在这种情况下,npm
进程将 运行ning 在后台运行,拖尾日志文件将成为根目录进程 tail -f /root/applog.log
。
不建议在生产系统中使用,但您可以在开发中利用。
FROM node:alpine
COPY . /root
WORKDIR /root
RUN echo $'#!/bin/sh \n\
npm run start & \n\
sleep 2 # give testServer time to create the newest log \n\
exec tail -f /root/applog.log ' >> /entrypoint.sh
RUN chmod 755 /entrypoint.sh
EXPOSE 3000
ENTRYPOINT [ "/entrypoint.sh" ]
该入口点在后台启动 npm,然后 运行 使用 exec 执行尾部。 exec 替换 pid 1 以便信号通过。
您可以进一步 here 来处理尾部的 PID,但不要忘记检查第一个答案的评论,这在您的情况下不起作用。
但在 Docker 的上下文中,将日志写入文件毫无用处,因为 docker 应该 运行 并终止,而不是保留日志文件。
另一件事,例如,如果您使用 AWS fargate,您不需要管理服务器到 运行 容器,因此您永远不会访问该文件,所以在那个case writing log to file 永远帮不了你
我建议在 Docker 的上下文中将所有日志写入控制台日志。
这里有一个教程,你可以在 nodejs 中按照这个教程来处理日志。
winston-logging-tutorial and using-winston-a-versatile-logging-library-for-node-js