Files
2025-09-24 10:53:28 +08:00

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__