10 struct FileLogger::Impl {
11 DotNetDupe::System::SmartPointer<FileLoggerContext> pContext;
18 m_pImpl->pContext = pContext;
35 std::string sOldBackup = sBaseName +
"." + std::to_string(iIdx);
36 std::string sNewBackup = sBaseName +
"." + std::to_string(iIdx + 1);
37 std::remove(sNewBackup.c_str());
38 std::rename(sOldBackup.c_str(), sNewBackup.c_str());
42 std::string sFirstBackup = sBaseName +
".1";
43 std::remove(sFirstBackup.c_str());
44 std::rename(sBaseName.c_str(), sFirstBackup.c_str());
47 pContext->
fileStream->open(sBaseName, std::ios::out | std::ios::app);
55 auto currentPos = pContext->
fileStream->tellp();
56 if (currentPos != std::streampos(-1) &&
static_cast<long long>(currentPos) + iLineLength >= config.
Rollover.
MaxFileSizeInBytes) {
65 if (!m_pImpl->pContext || !m_pImpl->pContext->fileStream || !m_pImpl->pContext->fileStream->is_open())
return;
69 std::lock_guard<std::mutex> lock(*(m_pImpl->pContext->fileMutex));
75 if (m_pImpl->pContext->fileStream && m_pImpl->pContext->fileStream->is_open()) {
76 (*(m_pImpl->pContext->fileStream)) << sLine.
GetRawString() << std::endl;
void Log(LogLevel logLevel, const DotNetDupe::System::String &message) override
Appends a plain message entry to the log file.
~FileLogger() override
Destructor releasing logger resources.
FileLogger(const DotNetDupe::System::String &categoryName, const LoggerConfiguration &config, const DotNetDupe::System::SmartPointer< FileLoggerContext > &context)
Initializes a new FileLogger instance.
void Log(LogLevel logLevel, const DotNetDupe::System::String &message) override
Writes a log entry without extra structured properties.
bool IsEnabled(LogLevel logLevel) const override
Checks whether logging is enabled for the specified log level.
DotNetDupe::System::String BuildLogMessage(LogLevel logLevel, const DotNetDupe::System::String &message, const DotNetDupe::System::Collections::Generic::Dictionary< DotNetDupe::System::String, DotNetDupe::System::String > &properties) const
Builds the final log message string applying plain text or JSON serialization.
LoggerConfiguration m_config
LoggerBase(const DotNetDupe::System::String &categoryName, const LoggerConfiguration &config)
Initializes a new LoggerBase instance with category name and configuration.
Represents a collection of keys and values.
A unified smart pointer that supports both unique and shared ownership semantics.
Represents text as a sequence of UTF-8 code units with culture-invariant operations.
const char * GetRawString() const
LogLevel
Defines logging severity levels.
static void CheckAndRollover(const LoggerConfiguration &config, FileLoggerContext *pContext, int iLineLength)
static void PerformFileRollover(const LoggerConfiguration &config, FileLoggerContext *pContext)
std::shared_ptr< std::ofstream > fileStream
long long MaxFileSizeInBytes
Maximum size in bytes of the primary log file before rotation (default: 5 MB).
bool EnableRollover
Indicates whether file rotation is enabled when file size threshold is reached.
int MaxBackupFiles
Maximum number of rotated backup log files to retain (default: 3).
Encapsulates logging system configuration options.
DotNetDupe::System::String FilePath
Destination file path when file logging is configured.
FileRolloverConfig Rollover
File rotation settings.