aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/actors/core/log_buffer.h
blob: f40cbae65a8086069f9f60429782414e60e2df54 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once

#include "log_metrics.h"
#include "log_iface.h"

#include <deque>

namespace NActors {

struct TLogBufferMessage {
    TString Formatted;
    TInstant Time;
    NLog::EComponent Component;
    NLog::EPrio Priority; 

    TLogBufferMessage(NLog::TEvLog::TPtr& ev);
};

class TLogBuffer {
    ILoggerMetrics *Metrics;
    std::deque<TLogBufferMessage> Buffer;
    ui64 BufferSize = 0;
    std::map<NLog::EPrio, ui32> PrioStats;

    void FilterByLogPriority(NLog::EPrio prio);
    bool inline CheckMessagesNumberEnoughForClearing(ui32 number);

    public:
    TLogBuffer(ILoggerMetrics *metrics);
    bool TryAddMessage(TLogBufferMessage message);
    TLogBufferMessage GetMessage();
    bool IsEmpty() const;
    size_t GetLogsNumber() const;
    ui64 GetSizeBytes() const;
    bool TryReduceLogsNumber();
};
}