113 lines
1.7 KiB
C++
113 lines
1.7 KiB
C++
|
#ifndef __LOG_WRITER_HPP__
|
||
|
#define __LOG_WRITER_HPP__
|
||
|
|
||
|
#include <unitree/common/log/log_buffer.hpp>
|
||
|
|
||
|
namespace unitree
|
||
|
{
|
||
|
namespace common
|
||
|
{
|
||
|
class LogWriter
|
||
|
{
|
||
|
public:
|
||
|
LogWriter() :
|
||
|
mFd(UT_FD_INVALID)
|
||
|
{}
|
||
|
|
||
|
virtual ~LogWriter()
|
||
|
{}
|
||
|
|
||
|
virtual void SetFd(int32_t fd)
|
||
|
{
|
||
|
mFd = fd;
|
||
|
}
|
||
|
|
||
|
virtual int32_t GetFd()
|
||
|
{
|
||
|
return mFd;
|
||
|
}
|
||
|
|
||
|
virtual void Write(const std::string& s) = 0;
|
||
|
|
||
|
protected:
|
||
|
int32_t mFd;
|
||
|
};
|
||
|
|
||
|
typedef std::shared_ptr<LogWriter> LogWriterPtr;
|
||
|
|
||
|
class LogDirectWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
LogDirectWriter();
|
||
|
LogDirectWriter(int32_t fd);
|
||
|
|
||
|
virtual ~LogDirectWriter();
|
||
|
|
||
|
void SetFd(int32_t fd);
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
protected:
|
||
|
Mutex mLock;
|
||
|
};
|
||
|
|
||
|
class LogStdoutWriter : public LogDirectWriter
|
||
|
{
|
||
|
public:
|
||
|
LogStdoutWriter() :
|
||
|
LogDirectWriter(UT_FD_STDOUT)
|
||
|
{}
|
||
|
|
||
|
~LogStdoutWriter()
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
class LogStderrWriter : public LogDirectWriter
|
||
|
{
|
||
|
public:
|
||
|
LogStderrWriter() :
|
||
|
LogDirectWriter(UT_FD_STDERR)
|
||
|
{}
|
||
|
|
||
|
~LogStderrWriter()
|
||
|
{}
|
||
|
};
|
||
|
|
||
|
class LogBufferWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogBufferWriter(uint64_t writeIntervalMicrosec = 100000);
|
||
|
|
||
|
~LogBufferWriter();
|
||
|
|
||
|
void SetFd(int32_t fd);
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
LogBufferPtr mBufferPtr;
|
||
|
Mutex mLock;
|
||
|
};
|
||
|
|
||
|
class LogAsyncBufferWriter : public LogWriter
|
||
|
{
|
||
|
public:
|
||
|
explicit LogAsyncBufferWriter(uint64_t writeIntervalMicrosec = 10000);
|
||
|
|
||
|
~LogAsyncBufferWriter();
|
||
|
|
||
|
void SetFd(int32_t fd);
|
||
|
void Write(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
void DoWrite();
|
||
|
bool WriteFD(const std::string& s);
|
||
|
|
||
|
private:
|
||
|
LogBlockBufferPtr mBufferPtr;
|
||
|
ThreadPtr mThreadPtr;
|
||
|
Mutex mLock;
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif//__LOG_WRITER_HPP__
|