Shu*_*ogi 8 logging dump docker
当我使用以下命令转储容器的 docker 日志时
docker 日志容器名称 > 容器名称.log
为文件生成的输出难以阅读和理解 - 未提及日志日期 - 添加了未知的转义字符
我不确定是否需要在上述命令中添加一些额外选项来转储日志,或者我的理解存在更大的差距。
输出示例:
托管环境:生产内容根路径:/app 现在监听:http://[::]:80 应用程序已启动。按 Ctrl+C 关闭。[39;49m[30m[[39;49m[39;49m[37m11:21:25.208 +00:00[39;49m[39;49m[30m]39;49m[39;49m[37mINF[39;49m[ 39;49m[30m] [39;49m[39;49m[36m请求开始 HTTP/1.1 GET http://localhost:31201/swagger [39;49m
[39;49m[30m[[39;49m[39;49m[37m11:21:25.943 +00:00[39;49m[39;49m[30m]39;49m[39;49m[37m[39;49m[ 37m[41mERR[39;49m[39;49m[30m]] [39;49m[39;49m[37mLevel = ErrorMessage = 以下详细信息的请求执行不成功: URL = http://localhost:31201/swagger
我可以使用 docker log 命令清楚地看到输出。我不确定为什么这些特殊字符被添加到输出中。
该输出来自希望写入 tty 的应用程序。这可能是您可以更改的应用程序配置。它还可能检测他们的输入何时是 tty,您可以使用 docker 进行切换(该-t标志或tty在默认为关闭的撰写文件中)。
如果您无法修改容器或应用程序以避免打印控制字符,那么您可以尝试使用 sed 命令将它们删除:
docker logs containername | sed $'s/[^[:print:]\t]//g' > containername.log
Run Code Online (Sandbox Code Playgroud)
感谢上面的回答帮助我找到了最终的解决方案。
上面的答案之一告诉我们使用仅在 Unix 上可用的sed实用程序,而我对 Windows 系统有特殊要求。对于 Windows 系统,我使用了 Powershell 3.0 中提供的 Replace 命令。powershell 使用正则表达式来帮助替换 ANSI 颜色代码。
下面是删除 ANSI 颜色代码的标准正则表达式(可在 Linux 和 Windows 中使用)
'\x1b\[[0-9;]*m'
Run Code Online (Sandbox Code Playgroud)
\x1b(或\x1B) 是转义特殊字符sed不支持替代\e和\033)\[是转义序列的第二个字符[0-9;]*是颜色值正则表达式m是转义序列的最后一个字符docker logs container | ForEach-Object { $_ -replace '\x1b\[[0-9;]*m','' }| Out-File -FilePath .\docker-logs.log
上面的命令将从输出流中删除特殊字符,例如[1;35m,[0m[1;3和。^[[37mABC
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |