перенаправить clangd stderr в файл вместо консоли - PullRequest
2 голосов
/ 10 января 2020

clangd записывает сообщения журнала в stderr. В 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 в файл вместо консоли. Я не хочу показывать много журналов в консоли, что раздражает пользователей, которым это безразлично, и разработчикам не стоит проверять журналы в будущем.

Заранее спасибо

1 Ответ

1 голос
/ 10 января 2020

Я сделал глупую и распространенную ошибку: «всегда перенаправлять 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
...