* renamed private members for more clear code * registerExternalBufferID() method to obtain unique ID for withExternalBuffer() * PICoutManipulators::PICoutStdStream enum for select stream (stdout or stderr) * Constructors now accept optional stream * piCerr and piCerrObj macros PIDir::temporary() moved to "mkdtemp" PILog: * now 4 levels * you can set max level * Error writes to piCerr
130 lines
3.6 KiB
C++
130 lines
3.6 KiB
C++
/*! \file pilog.h
|
|
* \ingroup Application
|
|
* \~\brief
|
|
* \~english High-level log
|
|
* \~russian Высокоуровневый лог
|
|
*/
|
|
/*
|
|
PIP - Platform Independent Primitives
|
|
High-level log
|
|
Ivan Pelipenko peri4ko@yandex.ru
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef PIlog_H
|
|
#define PIlog_H
|
|
|
|
#include "pifile.h"
|
|
#include "piiostream.h"
|
|
#include "pithread.h"
|
|
|
|
//! \ingroup Application
|
|
//! \~\brief
|
|
//! \~english High-level log
|
|
//! \~russian Высокоуровневый лог
|
|
class PIP_EXPORT PILog: public PIThread {
|
|
PIOBJECT_SUBCLASS(PILog, PIThread)
|
|
|
|
public:
|
|
PILog();
|
|
~PILog();
|
|
|
|
enum class Level {
|
|
Error,
|
|
Warning,
|
|
Info,
|
|
Debug,
|
|
};
|
|
|
|
//! \~english Returns prefix for filename.
|
|
PIString logName() const { return log_name; }
|
|
|
|
//! \~english Set prefix for filename. Should be set \b before \a setDir()!
|
|
void setLogName(const PIString & n) { log_name = n; }
|
|
|
|
|
|
//! \~english Returns directory for log files.
|
|
PIString dir() const { return log_dir; }
|
|
|
|
//! \~english Set directory for log files. Should be set \b after \a setApplicationName()!
|
|
void setDir(const PIString & d);
|
|
|
|
|
|
//! \~english Returns lifetime for file.
|
|
PISystemTime fileSplitTime() const { return split_time; }
|
|
|
|
//! \~english Set lifetime for file. Each "st" interval new file will be created.
|
|
void setFileSplitTime(PISystemTime st) { split_time = st; }
|
|
|
|
|
|
//! \~english Returns timestamp format for line.
|
|
PIString timestampFormat() const { return timestamp_format; }
|
|
|
|
//! \~english Set timestamp format for line. Default is "yyyy-MM-dd hh:mm:ss.zzz".
|
|
void setTimestampFormat(const PIString & f) { timestamp_format = f; }
|
|
|
|
|
|
//! \~english Returns line format.
|
|
PIString lineFormat() const { return line_format; }
|
|
|
|
//! \~english Set line format. "t" is timestamp, "c" is category and "m" is message. Default is "t - c: m".
|
|
void setLineFormat(const PIString & f);
|
|
|
|
|
|
//! \~english Returns maximum level.
|
|
Level level() const { return max_level; }
|
|
|
|
//! \~english Set maximum level. All levels greater than \"l\" will be ignored. Default if \a Level::Debug.
|
|
void setLevel(Level l);
|
|
|
|
|
|
PICout error(PIObject * context = nullptr);
|
|
PICout warning(PIObject * context = nullptr);
|
|
PICout info(PIObject * context = nullptr);
|
|
PICout debug(PIObject * context = nullptr);
|
|
|
|
//! \~english Write all queued lines and stop. Also called in destructor.
|
|
void stop();
|
|
|
|
private:
|
|
EVENT_HANDLER2(void, coutDone, int, id, PIString *, buff);
|
|
|
|
PICout makePICout(PIObject * context, Level cat);
|
|
void enqueue(const PIString & msg, Level cat = Level::Debug);
|
|
|
|
struct Entry {
|
|
Level cat;
|
|
PIDateTime time;
|
|
PIString msg;
|
|
};
|
|
|
|
PIString entryToString(const Entry & e) const;
|
|
void newFile();
|
|
void run() override;
|
|
|
|
PIMutex log_mutex;
|
|
PIFile log_file;
|
|
PIIOTextStream log_ts;
|
|
PITimeMeasurer split_tm;
|
|
PISystemTime split_time;
|
|
PIString log_dir, timestamp_format, line_format, line_format_p, log_name;
|
|
PIQueue<Entry> queue;
|
|
PIMap<Level, int> id_by_cat;
|
|
Level max_level = Level::Debug;
|
|
int part_number = -1, cout_id = -1;
|
|
};
|
|
|
|
#endif
|