V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dier
V2EX  ›  问与答

Linux 下动态输出的日志信息应该如何保存?

  •  
  •   dier · 2022-07-11 17:45:27 +08:00 · 1090 次点击
    这是一个创建于 899 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我发现在 Linux 环境下有些命令执行时在屏幕上输出的内容使用`>`或`>>`输出到指定文件,事后通过`cat`或`less`命令查看文件内容时会有不现的情况出现。例如`docker-compose -f file.yaml pull > /tmp/pull.log`拉取镜像过程有进度的输出,以及使用`docker-compose`执行后显示的那种带绿色的输出信息,虽然记录到了指定文件,但使用`cat /tmp/pull.log`查看时会把这个过程播放一遍,然后显示空白,而不是显示全部内容




    如果用`less`或`windows`下的编辑器打开,又会显示如下的情况




    想问一下大家是怎么从这种情况下记录下输出的日志信息。
    8 条回复    2022-07-11 21:33:14 +08:00
    masker
        1
    masker  
       2022-07-11 18:13:46 +08:00 via Android
    tee
    ysc3839
        2
    ysc3839  
       2022-07-11 18:36:19 +08:00
    所以你是想实现什么?只想保存最终屏幕上显示的结果,不要中间过程?那可以在 tmux 中执行,执行完保存一下。
    reter
        3
    reter  
       2022-07-11 18:45:32 +08:00
    docker-compose 输出带转义序列的编码(ANSI 颜色代码, ANSI escape sequences, ANSI color codes)的日志,最好的做法是除掉转义。

    0. 关闭 compose 的 ansi 输出. 看文档似乎 --no-ansi 可以关闭
    1. 输出管道中间加个可以去除转义的程序, ansi2txt 或者 sed 替换
    2. 切换到 非 tty 模式(一般程序检测到 tty 才会输出颜色编码), 比如 ls -cl < /dev/null |& cat

    搜索关键词:drop ANSI color codes,
    dier
        4
    dier  
    OP
       2022-07-11 19:37:58 +08:00 via iPhone
    @ysc3839 我是希望能保存屏幕上显示的结果,因为显示的结果有参考意义
    dier
        5
    dier  
    OP
       2022-07-11 19:40:06 +08:00 via iPhone
    @masker 1# 好像 docker-compose 的有些信息还是不能记录下来。我明天试试
    @reter 3# 的方法
    webcape233
        6
    webcape233  
       2022-07-11 20:46:10 +08:00 via iPhone
    请了解 标准输出和标准错误输出
    choury
        7
    choury  
       2022-07-11 20:55:28 +08:00 via Android
    你输出到文件当然就显示不了颜色也没法光标移动到开头覆盖这行了。如果只是想展示的效果一样,cat 这个文件就行
    asan2006
        8
    asan2006  
       2022-07-11 21:33:14 +08:00
    6 楼正解,xxx.sh > log.txt 2>&1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:27 · PVG 22:27 · LAX 06:27 · JFK 09:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.