blob: e62314ec183debf143b24679307b7bf018520ac4 [file] [log] [blame] [edit]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// <syslog.h> defines LOG_INFO, LOG_WARNING macros that conflicts with
// base/logging.h
#include <syslog.h>
#undef LOG_INFO
#undef LOG_WARNING
#include <base/logging.h>
namespace arc {
namespace {
int LoggingToSyslogPriority(int severity) {
switch (severity) {
case logging::LOGGING_VERBOSE:
return 7; // LOG_DEBUG
case logging::LOGGING_INFO:
return 6; // LOG_INFO
case logging::LOGGING_WARNING:
return 4; // LOG_WARNING
case logging::LOGGING_ERROR:
return 3; // LOG_ERR
case logging::LOGGING_FATAL:
return 2; // LOG_CRIT
default:
return 7; // LOG_DEBUG
}
}
bool RedirectMessage(int severity,
const char* file,
int line,
size_t message_start,
const std::string& str_newline) {
syslog(LoggingToSyslogPriority(severity), "%s", str_newline.c_str());
return true;
}
__attribute__((constructor)) void SetupLogging() {
logging::LoggingSettings settings;
settings.logging_dest = logging::LOG_NONE;
settings.log_format = logging::LogFormat::LOG_FORMAT_CHROME;
logging::InitLogging(settings);
openlog("libvda", LOG_NDELAY | LOG_PID, LOG_USER);
logging::SetLogMessageHandler(&RedirectMessage);
}
__attribute__((destructor)) void TeardownLogging() {
closelog();
}
} // namespace
} // namespace arc