Skip to content

Commit 015be28

Browse files
LimiNodeclaude
andcommitted
feat(macros): add ILogReader query macros
- LOGIT_GET_LOG_READER(index): retrieve ILogReader* from a logger by index - LOGIT_WITH_LOG_READER(index, var): scoped if-block with ILogReader pointer - LOGIT_READ_RANGE(index, from_ms, to_ms, limit): read time-window via ILogReader - LOGIT_READ_RECENT(index, limit, period_ms, order): read recent via ILogReader - LOGIT_READ_RECENT_ASC / DESC: shortcuts for LogReadOrder::Ascending / Descending Co-Authored-By: Claude Opus 4.8 <[email protected]>
1 parent b7839b2 commit 015be28

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

include/logit_cpp/logit/log_macros.hpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2924,6 +2924,62 @@ static_assert(LOGIT_LEVEL_FATAL == static_cast<int>(logit::LogLevel::LOG_LVL_FAT
29242924
#define LOGIT_WITH_LOGGER_AS(logger_index, logger_type, var_name) \
29252925
if (auto* var_name = LOGIT_GET_LOGGER_AS((logger_index), logger_type))
29262926

2927+
/// \brief Retrieves a read-only log-reader interface from a logger by index.
2928+
/// \param logger_index Index of logger.
2929+
/// \return Pointer to ILogReader, or nullptr if the backend does not implement it.
2930+
#define LOGIT_GET_LOG_READER(logger_index) \
2931+
LOGIT_GET_LOGGER_AS((logger_index), ::logit::ILogReader)
2932+
2933+
/// \brief Executes a code block when the logger backend supports ILogReader.
2934+
/// \param logger_index Index of logger.
2935+
/// \param var_name Variable name available inside the block.
2936+
#define LOGIT_WITH_LOG_READER(logger_index, var_name) \
2937+
if (auto* var_name = LOGIT_GET_LOG_READER((logger_index)))
2938+
2939+
/// \brief Reads a time-range of records from a backend that supports ILogReader.
2940+
/// \param logger_index Index of logger.
2941+
/// \param from_ms Inclusive start timestamp.
2942+
/// \param to_ms Exclusive end timestamp.
2943+
/// \param limit Maximum number of records (0 = unlimited).
2944+
/// \return Matching records, or empty vector if backend does not support reading.
2945+
#define LOGIT_READ_RANGE(logger_index, from_ms, to_ms, limit) \
2946+
([](int _idx, int64_t _from, int64_t _to, std::size_t _limit) { \
2947+
auto* _reader = LOGIT_GET_LOG_READER(_idx); \
2948+
return _reader \
2949+
? _reader->read_range(_from, _to, _limit) \
2950+
: std::vector<::logit::LogRecordView>{}; \
2951+
}((logger_index), (from_ms), (to_ms), (limit)))
2952+
2953+
/// \brief Reads recent records from a backend that supports ILogReader.
2954+
/// \param logger_index Index of logger.
2955+
/// \param limit Maximum number of records (0 = unlimited).
2956+
/// \param period_ms Time window in milliseconds from now backward (0 = unlimited).
2957+
/// \param order Ascending or descending result order.
2958+
/// \return Matching records, or empty vector if backend does not support reading.
2959+
#define LOGIT_READ_RECENT(logger_index, limit, period_ms, order) \
2960+
([](int _idx, std::size_t _limit, int64_t _period_ms, ::logit::LogReadOrder _order) { \
2961+
auto* _reader = LOGIT_GET_LOG_READER(_idx); \
2962+
return _reader \
2963+
? _reader->read_recent(_limit, _period_ms, _order) \
2964+
: std::vector<::logit::LogRecordView>{}; \
2965+
}((logger_index), (limit), (period_ms), (order)))
2966+
2967+
/// \brief Reads recent records in ascending order (oldest first).
2968+
/// \param logger_index Index of logger.
2969+
/// \param limit Maximum number of records (0 = unlimited).
2970+
/// \param period_ms Time window in milliseconds from now backward (0 = unlimited).
2971+
/// \return Matching records in ascending order, or empty vector if backend does not support reading.
2972+
#define LOGIT_READ_RECENT_ASC(logger_index, limit, period_ms) \
2973+
LOGIT_READ_RECENT((logger_index), (limit), (period_ms), ::logit::LogReadOrder::Ascending)
2974+
2975+
/// \brief Reads recent records in descending order (newest first).
2976+
/// \param logger_index Index of logger.
2977+
/// \param limit Maximum number of records (0 = unlimited).
2978+
/// \param period_ms Time window in milliseconds from now backward (0 = unlimited).
2979+
/// \return Matching records in descending order, or empty vector if backend does not support reading.
2980+
#define LOGIT_READ_RECENT_DESC(logger_index, limit, period_ms) \
2981+
LOGIT_READ_RECENT((logger_index), (limit), (period_ms), ::logit::LogReadOrder::Descending)
2982+
29272983
/// \}
29282984

29292985
#endif // LOGIT_LOG_MACROS_HPP_INCLUDED

0 commit comments

Comments
 (0)