
See script directory for method. The script to run in the top level MaxScale directory is called maxscale-uncrustify.sh, which uses another script, list-src, from the same directory (so you need to set your PATH). The uncrustify version was 0.66.
182 lines
3.8 KiB
C++
182 lines
3.8 KiB
C++
/*
|
|
* Copyright (c) 2018 MariaDB Corporation Ab
|
|
*
|
|
* Use of this software is governed by the Business Source License included
|
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
|
*
|
|
* Change Date: 2022-01-01
|
|
*
|
|
* On the date above, in accordance with the Business Source License, use
|
|
* of this software will be governed by version 2 or later of the General
|
|
* Public License.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <maxbase/ccdefs.hh>
|
|
|
|
#include <string>
|
|
#include <mutex>
|
|
#include <memory>
|
|
|
|
#include <unistd.h>
|
|
|
|
namespace maxbase
|
|
{
|
|
|
|
// Minimal logger interface
|
|
class Logger
|
|
{
|
|
public:
|
|
Logger(const Logger&) = delete;
|
|
Logger& operator=(const Logger&) = delete;
|
|
|
|
virtual ~Logger()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Set the identification, used in log header and footer.
|
|
* If not specified, the program name will be used.
|
|
*
|
|
* @param ident The identifying string.
|
|
*
|
|
* @attention The identification should be specified before the
|
|
* log is initialized.
|
|
*/
|
|
static void set_ident(const std::string& ident);
|
|
|
|
/**
|
|
* Write a message to the log
|
|
*
|
|
* @param msg Message to write
|
|
* @param len Length of message
|
|
*
|
|
* @return True on success
|
|
*/
|
|
virtual bool write(const char* msg, int len) = 0;
|
|
|
|
/**
|
|
* Rotate the logfile
|
|
*
|
|
* @return True if the log was rotated
|
|
*/
|
|
virtual bool rotate() = 0;
|
|
|
|
/**
|
|
* Get the name of the log file
|
|
*
|
|
* @return The name of the log file
|
|
*/
|
|
const char* filename() const
|
|
{
|
|
return m_filename.c_str();
|
|
}
|
|
|
|
protected:
|
|
Logger(const std::string& filename)
|
|
: m_filename(filename)
|
|
{
|
|
}
|
|
|
|
std::string m_filename;
|
|
};
|
|
|
|
class FileLogger : public Logger
|
|
{
|
|
public:
|
|
FileLogger(const FileLogger&) = delete;
|
|
FileLogger& operator=(const FileLogger&) = delete;
|
|
|
|
/**
|
|
* Create a new logger that writes to a file
|
|
*
|
|
* @param logdir Log file to open
|
|
*
|
|
* @return New logger instance or an empty unique_ptr on error
|
|
*/
|
|
static std::unique_ptr<Logger> create(const std::string& filename);
|
|
|
|
/**
|
|
* Close the log
|
|
*
|
|
* A footer is written to the log and the file is closed.
|
|
*/
|
|
~FileLogger();
|
|
|
|
/**
|
|
* Write a message to the log
|
|
*
|
|
* @param msg Message to write
|
|
* @param len Length of message
|
|
*
|
|
* @return True on success
|
|
*/
|
|
bool write(const char* msg, int len);
|
|
|
|
/**
|
|
* Rotate the logfile by reopening it
|
|
*
|
|
* @return True if the log was rotated. False if the opening of the new file
|
|
* descriptor failed in which case the old file descriptor will be used.
|
|
*/
|
|
bool rotate();
|
|
|
|
private:
|
|
int m_fd;
|
|
std::mutex m_lock;
|
|
|
|
FileLogger(int fd, const std::string& filename);
|
|
bool write_header();
|
|
bool write_footer(const char* suffix);
|
|
void close(const char* msg);
|
|
};
|
|
|
|
class StdoutLogger : public Logger
|
|
{
|
|
public:
|
|
StdoutLogger(const StdoutLogger&) = delete;
|
|
StdoutLogger& operator=(const StdoutLogger&) = delete;
|
|
|
|
/**
|
|
* Create a new logger that writes to stdout
|
|
*
|
|
* @param logdir Log file to open, has no functional effect on this logger
|
|
*
|
|
* @return New logger instance or an empty unique_ptr on error
|
|
*/
|
|
static std::unique_ptr<Logger> create(const std::string& filename)
|
|
{
|
|
return std::unique_ptr<Logger>(new StdoutLogger(filename));
|
|
}
|
|
|
|
/**
|
|
* Write a message to stdout
|
|
*
|
|
* @param msg Message to write
|
|
* @param len Length of message
|
|
*
|
|
* @return True on success
|
|
*/
|
|
bool write(const char* msg, int len)
|
|
{
|
|
return ::write(STDOUT_FILENO, msg, len) != -1;
|
|
}
|
|
|
|
/**
|
|
* Rotate the "logfile"
|
|
*
|
|
* @return Always true
|
|
*/
|
|
bool rotate()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
private:
|
|
StdoutLogger(const std::string& filename)
|
|
: Logger(filename)
|
|
{
|
|
}
|
|
};
|
|
}
|