🐛 fix(logging): support --log-stderr and clarify stdin wait
- Make logs go to stderr by default (keep LSP stdout clean). - Add --log-stderr/--log-stdout flags and wire config.use_stderr into spdlog. - Log an explicit message when waiting for LSP input on stdin.
This commit is contained in:
parent
241de77152
commit
9a12b1b194
|
|
@ -112,6 +112,7 @@ namespace lsp::core
|
||||||
void LspServer::Run()
|
void LspServer::Run()
|
||||||
{
|
{
|
||||||
spdlog::info("LSP server starting main loop...");
|
spdlog::info("LSP server starting main loop...");
|
||||||
|
spdlog::info("Waiting for LSP messages on stdin...");
|
||||||
|
|
||||||
// 设置二进制模式
|
// 设置二进制模式
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,9 @@ namespace lsp::utils
|
||||||
const ServerConfig& ArgsParser::Parse(int argc, char* argv[])
|
const ServerConfig& ArgsParser::Parse(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
config_ = ServerConfig{};
|
config_ = ServerConfig{};
|
||||||
bool use_stdio = false;
|
// Default to stderr so LSP stdio (stdout) stays clean.
|
||||||
|
config_.use_stderr = true;
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i)
|
for (int i = 1; i < argc; ++i)
|
||||||
{
|
{
|
||||||
std::string arg = argv[i];
|
std::string arg = argv[i];
|
||||||
|
|
@ -75,10 +77,14 @@ namespace lsp::utils
|
||||||
config_.log_level = spdlog::level::err;
|
config_.log_level = spdlog::level::err;
|
||||||
else if (arg == "--log=off")
|
else if (arg == "--log=off")
|
||||||
config_.log_level = spdlog::level::off;
|
config_.log_level = spdlog::level::off;
|
||||||
|
else if (arg == "--log-stderr")
|
||||||
|
config_.use_stderr = true;
|
||||||
|
else if (arg == "--log-stdout")
|
||||||
|
config_.use_stderr = false;
|
||||||
else if (arg.find("--log-file=") == 0)
|
else if (arg.find("--log-file=") == 0)
|
||||||
config_.log_file = arg.substr(std::strlen("--log-file="));
|
config_.log_file = arg.substr(std::strlen("--log-file="));
|
||||||
else if (arg == "--use-stdio")
|
else if (arg == "--use-stdio")
|
||||||
use_stdio = true;
|
config_.use_stderr = true;
|
||||||
else if (arg.find("--threads=") == 0)
|
else if (arg.find("--threads=") == 0)
|
||||||
{
|
{
|
||||||
auto value = arg.substr(std::strlen("--threads="));
|
auto value = arg.substr(std::strlen("--threads="));
|
||||||
|
|
@ -90,9 +96,6 @@ namespace lsp::utils
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!use_stdio)
|
|
||||||
config_.use_stderr = true;
|
|
||||||
|
|
||||||
return config_;
|
return config_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -113,7 +116,7 @@ namespace lsp::utils
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto console_logger = spdlog::stdout_logger_mt("console_logger");
|
auto console_logger = config.use_stderr ? spdlog::stderr_logger_mt("console_logger") : spdlog::stdout_logger_mt("console_logger");
|
||||||
console_logger->set_level(config.log_level);
|
console_logger->set_level(config.log_level);
|
||||||
spdlog::set_default_logger(console_logger);
|
spdlog::set_default_logger(console_logger);
|
||||||
}
|
}
|
||||||
|
|
@ -127,8 +130,10 @@ namespace lsp::utils
|
||||||
<< "Options:\\n"
|
<< "Options:\\n"
|
||||||
<< " --help Show this help message\\n"
|
<< " --help Show this help message\\n"
|
||||||
<< " --log=<level> Set log level (trace, debug, info, warn, error, off)\\n"
|
<< " --log=<level> Set log level (trace, debug, info, warn, error, off)\\n"
|
||||||
|
<< " --log-stderr Output logs to stderr (default)\\n"
|
||||||
|
<< " --log-stdout Output logs to stdout\\n"
|
||||||
<< " --log-file=<path> Output logs to specified file\\n"
|
<< " --log-file=<path> Output logs to specified file\\n"
|
||||||
<< " --use-stdio Use stdin/stdout for I/O (default: stderr)\\n"
|
<< " --use-stdio Alias for --log-stderr (keep stdout clean for LSP)\\n"
|
||||||
<< " --threads=<count> Number of worker threads\\n"
|
<< " --threads=<count> Number of worker threads\\n"
|
||||||
<< " --interpreter=<path> Custom interpreter path\\n";
|
<< " --interpreter=<path> Custom interpreter path\\n";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue