|
1 | 1 | #ifndef _NBL_SYSTEM_C_FILE_LOGGER_INCLUDED_
|
2 | 2 | #define _NBL_SYSTEM_C_FILE_LOGGER_INCLUDED_
|
3 | 3 |
|
4 |
| -#include <filesystem> |
5 |
| -#include <fstream> |
6 |
| - |
7 |
| -#include "IThreadsafeLogger.h" |
| 4 | +#include "nbl/system/IThreadsafeLogger.h" |
| 5 | +#include "nbl/system/IFile.h" |
8 | 6 |
|
9 | 7 | namespace nbl::system
|
10 | 8 | {
|
11 | 9 |
|
12 | 10 | class CFileLogger : public IThreadsafeLogger
|
13 | 11 | {
|
14 | 12 | public:
|
15 |
| - static core::smart_refctd_ptr<CFileLogger> create(const std::filesystem::path& outputFileName) |
16 |
| - { |
17 |
| - auto ret = core::smart_refctd_ptr<CFileLogger>(new CFileLogger(outputFileName)); |
18 |
| - if (!ret->m_ofs.is_open()) return nullptr; |
19 |
| - return ret; |
20 |
| - } |
21 |
| - ~CFileLogger() |
| 13 | + CFileLogger(core::smart_refctd_ptr<IFile>&& _file, const core::bitflag<E_LOG_LEVEL> logLevelMask=ILogger::defaultLogMask()) |
| 14 | + : IThreadsafeLogger(logLevelMask), m_file(std::move(_file)) |
22 | 15 | {
|
23 | 16 | }
|
24 |
| - private: |
25 |
| - std::ofstream m_ofs; |
26 |
| - CFileLogger(const std::filesystem::path& outputFileName, core::bitflag<E_LOG_LEVEL> logLevelMask = ILogger::defaultLogMask()) : IThreadsafeLogger(logLevelMask), m_ofs(outputFileName, std::ios_base::app){} |
| 17 | + |
| 18 | + protected: |
| 19 | + ~CFileLogger() = default; |
27 | 20 |
|
28 | 21 | virtual void threadsafeLog_impl(const std::string_view& fmt, E_LOG_LEVEL logLevel, va_list args) override
|
29 | 22 | {
|
30 |
| - m_ofs << constructLogString(fmt, logLevel, args).data() << std::flush; |
| 23 | + const auto str = constructLogString(fmt, logLevel, args); |
| 24 | + ISystem::future_t<size_t> future; |
| 25 | + m_file->write(future,str.data(),m_file->getSize(),str.length()); |
31 | 26 | }
|
| 27 | + |
| 28 | + core::smart_refctd_ptr<IFile> m_file; |
32 | 29 | };
|
33 | 30 |
|
34 | 31 | }
|
|
0 commit comments