// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBBRILLO_BRILLO_SYSLOG_LOGGING_H_
#define LIBBRILLO_BRILLO_SYSLOG_LOGGING_H_

#include <string>

#include <brillo/brillo_export.h>

namespace brillo {

enum InitFlags {
  // Always log to syslog.
  kLogToSyslog = 1,
  // Always log to stderr.
  kLogToStderr = 2,
  // Include message header in log lines.
  kLogHeader = 4,
  // Log to stderr if stdin is a tty (e.g. command line).
  kLogToStderrIfTty = 8,
};

// Initialize logging subsystem.  |init_flags| is a bitfield, with bits defined
// in InitFlags above.
BRILLO_EXPORT void InitLog(int init_flags);
// Gets the current logging flags.
BRILLO_EXPORT int GetLogFlags();
// Sets the current logging flags.
BRILLO_EXPORT void SetLogFlags(int log_flags);
// Convenience function for configuring syslog via openlog.  Users
// could call openlog directly except for naming collisions between
// base/logging.h and syslog.h.  Similarly users cannot pass the
// normal parameters so we pick a representative set.  |log_pid|
// causes pid to be logged with |ident|.
BRILLO_EXPORT void OpenLog(const char* ident, bool log_pid);
// Start accumulating the logs to a string.  This is inefficient, so
// do not set to true if large numbers of log messages are coming.
// Accumulated logs are only ever cleared when the clear function ings
// called.
BRILLO_EXPORT void LogToString(bool enabled);
// Get the accumulated logs as a string.
BRILLO_EXPORT std::string GetLog();
// Clear the accumulated logs.
BRILLO_EXPORT void ClearLog();
// Returns true if the accumulated log contains the given string.  Useful
// for testing.
BRILLO_EXPORT bool FindLog(const char* string);

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_SYSLOG_LOGGING_H_
