deskflow/src/lib/base/LogOutputters.h

117 lines
3 KiB
C
Raw Normal View History

2012-06-10 16:50:54 +00:00
/*
* Deskflow -- mouse and keyboard sharing utility
2025-02-24 19:21:32 +00:00
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
2012-06-10 16:50:54 +00:00
*/
#pragma once
2012-06-10 16:50:54 +00:00
#include "base/ILogOutputter.h"
#include "common/Common.h"
#include "mt/Thread.h"
2012-06-10 16:50:54 +00:00
//! Stop traversing log chain outputter
/*!
This outputter performs no output and returns false from \c write(),
causing the logger to stop traversing the outputter chain. Insert
this to prevent already inserted outputters from writing.
*/
class StopLogOutputter : public ILogOutputter
{
2012-06-10 16:50:54 +00:00
public:
StopLogOutputter() = default;
~StopLogOutputter() override = default;
// ILogOutputter overrides
void open(const char *title) override;
void close() override;
void show(bool showIfEmpty) override;
bool write(ELevel level, const char *message) override;
2012-06-10 16:50:54 +00:00
};
//! Write log to console
/*!
This outputter writes output to the console. The level for each
message is ignored.
*/
class ConsoleLogOutputter : public ILogOutputter
{
2012-06-10 16:50:54 +00:00
public:
ConsoleLogOutputter() = default;
~ConsoleLogOutputter() override = default;
// ILogOutputter overrides
void open(const char *title) override;
void close() override;
void show(bool showIfEmpty) override;
bool write(ELevel level, const char *message) override;
void flush();
2012-06-10 16:50:54 +00:00
};
//! Write log to file
/*!
This outputter writes output to the file. The level for each
message is ignored.
*/
class FileLogOutputter : public ILogOutputter
{
2012-06-10 16:50:54 +00:00
public:
explicit FileLogOutputter(const char *logFile);
~FileLogOutputter() override = default;
2012-06-10 16:50:54 +00:00
// ILogOutputter overrides
void open(const char *title) override;
void close() override;
void show(bool showIfEmpty) override;
bool write(ELevel level, const char *message) override;
void setLogFilename(const char *title);
2012-06-10 16:50:54 +00:00
private:
std::string m_fileName;
2012-06-10 16:50:54 +00:00
};
//! Write log to system log
/*!
This outputter writes output to the system log.
*/
class SystemLogOutputter : public ILogOutputter
{
2012-06-10 16:50:54 +00:00
public:
SystemLogOutputter() = default;
~SystemLogOutputter() override = default;
// ILogOutputter overrides
void open(const char *title) override;
void close() override;
void show(bool showIfEmpty) override;
bool write(ELevel level, const char *message) override;
2012-06-10 16:50:54 +00:00
};
//! Write log to system log only
/*!
2014-11-11 13:51:47 +00:00
Creating an object of this type inserts a StopLogOutputter followed
by a SystemLogOutputter into Log. The destructor removes those
2012-06-10 16:50:54 +00:00
outputters. Add one of these to any scope that needs to write to
the system log (only) and restore the old outputters when exiting
the scope.
*/
class SystemLogger
{
2012-06-10 16:50:54 +00:00
public:
SystemLogger(const char *title, bool blockConsole);
SystemLogger(SystemLogger const &) = delete;
SystemLogger(SystemLogger &&) = delete;
~SystemLogger();
2012-06-10 16:50:54 +00:00
SystemLogger &operator=(SystemLogger const &) = delete;
SystemLogger &operator=(SystemLogger &&) = delete;
2020-11-03 10:52:56 +00:00
2012-06-10 16:50:54 +00:00
private:
ILogOutputter *m_syslog;
ILogOutputter *m_stop;
2012-06-10 16:50:54 +00:00
};