【问题标题】:redirect clangd stderr to a file instead of console将 clangd stderr 重定向到文件而不是控制台
【发布时间】:2020-04-28 01:33:40
【问题描述】:

clangd 将日志消息写入标准错误。在 Linux 中,我需要将 stderr 重定向到日志文件以供将来使用,而不是控制台

我使用的命令是:

clangd --clang-tidy -compile-commands-dir=$SOME_PATH --log=error > $SOME_PATH/clangd.log 2>&1

它可以启动并重定向到该文件,但几秒钟后,clangd 停止并在clangd.log 文件中出现此错误

I[18:10:31.484] clangd version 9.0.0 (https://github.com/llvm-mirror/llvm c62b24f070c9a4bb1a76409e623042a740cac4cd)
I[18:10:31.484] Working directory: ......
I[18:10:31.484] argv[0]: clangd
I[18:10:31.484] argv[1]: --clang-tidy
I[18:10:31.484] argv[2]: -compile-commands-dir=......
I[18:10:31.484] argv[3]: --log=error
I[18:10:31.484] Starting LSP over stdin/stdout
......

I[18:10:31.706] <-- initialize("1")
I[18:10:31.707] --> reply:initialize("1") 0 ms
Content-Length: 1038
......


V[18:10:41.710] <<< {"id":"2","jsonrpc":"2.0","method":"shutdown","params":null}

I[18:10:41.711] <-- shutdown("2")
I[18:10:41.711] --> reply:shutdown("2") 0 ms
Content-Length: 40

{"id":"2","jsonrpc":"2.0","result":null}V[18:10:41.711] >>> {"id":"2","jsonrpc":"2.0","result":null}

E[18:10:46.711] Transport error: Input/output error

我错过了什么?为什么传输错误?对于clangd进程,stderr是控制台还是文件应该不是问题?

我只想将 stderr 重定向到文件而不是控制台。不想在控制台显示很多日志,这对不关心的用户来说很烦,也不利于开发者日后查看日志。

提前致谢

【问题讨论】:

  • 你确定是重定向造成的吗?请注意,错误确实进入了文件,如果它是与写入文件相关的传输错误,这没有多大意义。
  • 谢谢,我找到了原因,因为我也重定向了stdout!我应该只重定向标准错误!
  • 哦,我看到它使用标准输出来响应大声笑。有点奇怪
  • @LightnessRacesBY-SA3.0 是的,"Starting LSP over stdin/stdout" ,有点奇怪。因为标准输出中通常没有与用户相关的内容。无论如何,如果有人真的想了解原因,检查 llvm clangd 代码可能会有所帮助

标签: c++ shell clangd


【解决方案1】:

我犯了一个愚蠢而常见的错误,“总是将 stdout 与 stderr 一起重定向”

喜欢这个

> $SOME_PATH/clangd.log 2>&1

我只通过将 stderr 重定向到一个文件来解决它,而只留下 stdout。

工作脚本是

clangd --clang-tidy -compile-commands-dir=$SOME_PATH --log=error 2> $SOME_PATH/clangd.log

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2014-07-22
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多