[lldb] Log to system log instead of stderr from Host::SystemLog (#83366)

Currently, calls to Host::SystemLog print to stderr on all host
platforms except Darwin. This severely limits its value on the command
line, where we don't want to overload the user with log messages. Switch
to using the syslog function on POSIX systems to send messages to the
system logger instead of stdout.

On Darwin systems this sends the log message to os_log, which matches
what we do today. Nevertheless I kept the current implementation that
uses os_log directly as it gives us more freedom.

I'm not sure if there's an equivalent on Windows, so I kept the existing
behavior of logging to stderr.
This commit is contained in:
Jonas Devlieghere 2024-03-05 10:56:01 -08:00 committed by GitHub
parent 083d8aa03a
commit 1b812f9cd6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -89,8 +89,19 @@ using namespace lldb;
using namespace lldb_private;
#if !defined(__APPLE__)
#if !defined(_WIN32)
#include <syslog.h>
void Host::SystemLog(llvm::StringRef message) {
static llvm::once_flag g_openlog_once;
llvm::call_once(g_openlog_once, [] {
openlog("lldb", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER);
});
syslog(LOG_INFO, "%s", message.data());
}
#else
void Host::SystemLog(llvm::StringRef message) { llvm::errs() << message; }
#endif
#endif
#if !defined(__APPLE__) && !defined(_WIN32)
static thread_result_t