89 lines
1.6 KiB
C++
89 lines
1.6 KiB
C++
|
#ifndef __LOG_WRITER_HPP__
|
||
|
#define __LOG_WRITER_HPP__
|
||
|
|
||
|
#include <unitree/common/log/log_buffer.hpp>
|
||
|
#include <unitree/common/log/log_keeper.hpp>
|
||
|
|
||
|
namespace unitree
|
||
|
{
|
||
|
namespace common
|
||
|
{
|
||
|
class LogWriter
|
||
|
{
|
||
|
public:
|
||
|
virtual void Write(const std::string& s) = 0;
|
||
|
};
|
||
|
|
||
|
typedef std::shared_ptr<LogWriter> LogWriterPtr;
|
||
|
|
||
|
class LogDirectWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogDirectWriter(int32_t fd);
|
||
|
virtual ~LogDirectWriter();
|
||
|
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
Mutex mLock;
|
||
|
int32_t mFd;
|
||
|
};
|
||
|
|
||
|
class LogStdoutWriter : public LogDirectWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogStdoutWriter() :
|
||
|
LogDirectWriter(UT_FD_STDOUT)
|
||
|
{}
|
||
|
~LogStdoutWriter()
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
class LogStderrWriter : public LogDirectWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogStderrWriter() :
|
||
|
LogDirectWriter(UT_FD_STDERR)
|
||
|
{}
|
||
|
~LogStderrWriter()
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
class LogBufferWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogBufferWriter(LogKeeperPtr keeperPtr);
|
||
|
~LogBufferWriter();
|
||
|
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
LogBufferPtr mBufferPtr;
|
||
|
LogKeeperPtr mKeeperPtr;
|
||
|
Mutex mLock;
|
||
|
};
|
||
|
|
||
|
class LogAsyncBufferWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogAsyncBufferWriter(LogKeeperPtr keeperPtr);
|
||
|
~LogAsyncBufferWriter();
|
||
|
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
void DoWrite();
|
||
|
|
||
|
private:
|
||
|
volatile bool mRotate;
|
||
|
std::string mTempBuf;
|
||
|
LogBufferPtr mBufferPtr;
|
||
|
LogKeeperPtr mKeeperPtr;
|
||
|
ThreadPtr mThreadPtr;
|
||
|
Mutex mLock;
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif//__LOG_WRITER_HPP__
|