Skip to content

Commit d8e50cc

Browse files
committed
kernel: expose btck_LogEntry
Preparatory work for a future commit where the btck_LogCallback exposes btck_LogEntry instead of a string. Contains a lot of move-only changes, consider reviewing with --color-moved=dimmed-zebra
1 parent 787586e commit d8e50cc

File tree

2 files changed

+61
-28
lines changed

2 files changed

+61
-28
lines changed

src/kernel/bitcoinkernel.h

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,48 @@ typedef uint8_t btck_Warning;
323323
#define btck_Warning_UNKNOWN_NEW_RULES_ACTIVATED ((btck_Warning)(0))
324324
#define btck_Warning_LARGE_WORK_INVALID_CHAIN ((btck_Warning)(1))
325325

326+
/**
327+
* A collection of logging categories that may be encountered by kernel code.
328+
*/
329+
typedef uint8_t btck_LogCategory;
330+
#define btck_LogCategory_ALL ((btck_LogCategory)(0))
331+
#define btck_LogCategory_BENCH ((btck_LogCategory)(1))
332+
#define btck_LogCategory_BLOCKSTORAGE ((btck_LogCategory)(2))
333+
#define btck_LogCategory_COINDB ((btck_LogCategory)(3))
334+
#define btck_LogCategory_ESTIMATEFEE ((btck_LogCategory)(4))
335+
#define btck_LogCategory_KERNEL ((btck_LogCategory)(5))
336+
#define btck_LogCategory_LEVELDB ((btck_LogCategory)(6))
337+
#define btck_LogCategory_MEMPOOL ((btck_LogCategory)(7))
338+
#define btck_LogCategory_PRUNE ((btck_LogCategory)(8))
339+
#define btck_LogCategory_RAND ((btck_LogCategory)(9))
340+
#define btck_LogCategory_REINDEX ((btck_LogCategory)(10))
341+
#define btck_LogCategory_TXPACKAGES ((btck_LogCategory)(11))
342+
#define btck_LogCategory_VALIDATION ((btck_LogCategory)(12))
343+
344+
/**
345+
* The level at which logs should be produced.
346+
*/
347+
typedef uint8_t btck_LogLevel;
348+
#define btck_LogLevel_TRACE ((btck_LogLevel)(0))
349+
#define btck_LogLevel_DEBUG ((btck_LogLevel)(1))
350+
#define btck_LogLevel_INFO ((btck_LogLevel)(2))
351+
#define btck_LogLevel_WARNING ((btck_LogLevel)(3))
352+
#define btck_LogLevel_ERROR ((btck_LogLevel)(4))
353+
354+
/**
355+
* A structured log entry passed to the logging callback.
356+
*/
357+
typedef struct {
358+
btck_StringView message; //!< Log message.
359+
btck_StringView file_name; //!< Source file name.
360+
btck_StringView function_name; //!< Source function name.
361+
btck_StringView thread_name; //!< Thread name.
362+
int64_t timestamp_ns; //!< Timestamp in nanoseconds since epoch.
363+
uint32_t line; //!< Source line number.
364+
btck_LogLevel level; //!< Log level.
365+
btck_LogCategory category; //!< Log category.
366+
} btck_LogEntry;
367+
326368
/** Callback function types */
327369

328370
/**
@@ -428,34 +470,6 @@ typedef struct {
428470
btck_NotifyFatalError fatal_error; //!< An unrecoverable system error encountered by the library.
429471
} btck_NotificationInterfaceCallbacks;
430472

431-
/**
432-
* A collection of logging categories that may be encountered by kernel code.
433-
*/
434-
typedef uint8_t btck_LogCategory;
435-
#define btck_LogCategory_ALL ((btck_LogCategory)(0))
436-
#define btck_LogCategory_BENCH ((btck_LogCategory)(1))
437-
#define btck_LogCategory_BLOCKSTORAGE ((btck_LogCategory)(2))
438-
#define btck_LogCategory_COINDB ((btck_LogCategory)(3))
439-
#define btck_LogCategory_ESTIMATEFEE ((btck_LogCategory)(4))
440-
#define btck_LogCategory_KERNEL ((btck_LogCategory)(5))
441-
#define btck_LogCategory_LEVELDB ((btck_LogCategory)(6))
442-
#define btck_LogCategory_MEMPOOL ((btck_LogCategory)(7))
443-
#define btck_LogCategory_PRUNE ((btck_LogCategory)(8))
444-
#define btck_LogCategory_RAND ((btck_LogCategory)(9))
445-
#define btck_LogCategory_REINDEX ((btck_LogCategory)(10))
446-
#define btck_LogCategory_TXPACKAGES ((btck_LogCategory)(11))
447-
#define btck_LogCategory_VALIDATION ((btck_LogCategory)(12))
448-
449-
/**
450-
* The level at which logs should be produced.
451-
*/
452-
typedef uint8_t btck_LogLevel;
453-
#define btck_LogLevel_TRACE ((btck_LogLevel)(0))
454-
#define btck_LogLevel_DEBUG ((btck_LogLevel)(1))
455-
#define btck_LogLevel_INFO ((btck_LogLevel)(2))
456-
#define btck_LogLevel_WARNING ((btck_LogLevel)(3))
457-
#define btck_LogLevel_ERROR ((btck_LogLevel)(4))
458-
459473
/**
460474
* Options controlling the format of log messages.
461475
*

src/kernel/bitcoinkernel_wrapper.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <kernel/bitcoinkernel.h>
99

1010
#include <array>
11+
#include <chrono>
1112
#include <exception>
1213
#include <functional>
1314
#include <memory>
@@ -829,6 +830,24 @@ inline void logging_enable_category(LogCategory category)
829830
btck_logging_enable_category(static_cast<btck_LogCategory>(category));
830831
}
831832

833+
class LogEntry
834+
{
835+
private:
836+
const btck_LogEntry* m_entry;
837+
838+
public:
839+
LogEntry(const btck_LogEntry& e) : m_entry{&e} {}
840+
841+
std::string_view Message() const { return {m_entry->message.data, m_entry->message.size}; }
842+
std::string_view FileName() const { return {m_entry->file_name.data, m_entry->file_name.size}; }
843+
std::string_view FunctionName() const { return {m_entry->function_name.data, m_entry->function_name.size}; }
844+
std::string_view ThreadName() const { return {m_entry->thread_name.data, m_entry->thread_name.size}; }
845+
std::chrono::sys_time<std::chrono::nanoseconds> Timestamp() const { return std::chrono::sys_time<std::chrono::nanoseconds>{std::chrono::nanoseconds{m_entry->timestamp_ns}}; }
846+
uint32_t Line() const { return m_entry->line; }
847+
LogLevel Level() const { return static_cast<LogLevel>(m_entry->level); }
848+
LogCategory Category() const { return static_cast<LogCategory>(m_entry->category); }
849+
};
850+
832851
inline void logging_disable_category(LogCategory category)
833852
{
834853
btck_logging_disable_category(static_cast<btck_LogCategory>(category));

0 commit comments

Comments
 (0)