LiteCore
Couchbase Lite cross-platform core implementation
Loading...
Searching...
No Matches
c4Log.h
Go to the documentation of this file.
1//
2// c4Log.h
3//
4// Copyright 2021-Present Couchbase, Inc.
5//
6// Use of this software is governed by the Business Source License included
7// in the file licenses/BSL-Couchbase.txt. As of the Change Date specified
8// in that file, in accordance with the Business Source License, use of this
9// software will be governed by the Apache License, Version 2.0, included in
10// the file licenses/APL2.txt.
11//
12
13#pragma once
14#include "c4Compat.h"
15#include "c4Error.h"
16#include "fleece/FLSlice.h"
17#ifdef __cplusplus
18# include <cstdarg>
19#else
20# include <stdarg.h>
21#endif
22
25
26
30/*
31 * NOTE: All logging functions are thread-safe
32 */
33
43
45typedef struct c4LogDomain* C4LogDomain;
46
47
55
56
57#pragma mark - FILE LOGGING:
58
68
76
79
82
86
89
90
91#pragma mark - CALLBACK LOGGING:
92
93
95typedef void (*C4NULLABLE C4LogCallback)(C4LogDomain, C4LogLevel, const char* fmt, va_list args);
96
105CBL_CORE_API void c4log_writeToCallback(C4LogLevel level, C4LogCallback callback, bool preformatted) C4API;
106
109
113
116
117
118#pragma mark - LOG DOMAINS:
119
120
125CBL_CORE_API C4LogDomain c4log_getDomain(const char* name, bool create) C4API;
126
129
132
140
148
149
150#pragma mark - LOGGING EXCEPTIONs:
151
152
157
160
164
165
166#pragma mark - WRITING LOG MESSAGES:
167
168
176CBL_CORE_API void c4log(C4LogDomain domain, C4LogLevel level, const char* fmt, ...) C4API __printflike(3, 4);
177
179CBL_CORE_API void c4vlog(C4LogDomain domain, C4LogLevel level, const char* fmt, va_list args) C4API __printflike(3, 0);
180
183
184// Convenient aliases for c4log:
185#define C4LogToAt(DOMAIN, LEVEL, FMT, ...) \
186 do { \
187 if ( c4log_willLog(DOMAIN, LEVEL) ) c4log(DOMAIN, LEVEL, FMT, ##__VA_ARGS__); \
188 } while ( false )
189#define C4Debug(FMT, ...) C4LogToAt(kC4DefaultLog, kC4LogDebug, FMT, ##__VA_ARGS__)
190#define C4Log(FMT, ...) C4LogToAt(kC4DefaultLog, kC4LogInfo, FMT, ##__VA_ARGS__)
191#define C4LogVerbose(FMT, ...) C4LogToAt(kC4DefaultLog, kC4LogVerbose, FMT, ##__VA_ARGS__)
192#define C4Warn(FMT, ...) C4LogToAt(kC4DefaultLog, kC4LogWarning, FMT, ##__VA_ARGS__)
193#define C4WarnError(FMT, ...) C4LogToAt(kC4DefaultLog, kC4LogError, FMT, ##__VA_ARGS__)
194
195
#define NODISCARD
Definition CompilerSupport.h:59
#define CBL_CORE_API
Definition c4Compat.h:134
#define C4NULLABLE
Definition c4Compat.h:38
#define C4_ENUM(_type, _name)
Definition c4Compat.h:62
#define C4API
Definition c4Compat.h:114
#define C4_ASSUME_NONNULL_BEGIN
Definition c4Compat.h:36
#define C4API_END_DECLS
Definition c4Compat.h:116
#define __printflike(fmtarg, firstvararg)
Definition c4Compat.h:143
#define C4API_BEGIN_DECLS
Definition c4Compat.h:115
#define C4_ASSUME_NONNULL_END
Definition c4Compat.h:37
CBL_CORE_API bool c4log_getWarnOnErrors(void)
Returns true if warn-on-errors is on; see c4log_warnOnErrors.
CBL_CORE_API C4LogLevel c4log_binaryFileLevel(void)
Returns the minimum level of log messages to be written to the log file, regardless of what level ind...
CBL_CORE_API void c4log_flushLogFiles(void)
Ensures all log messages have been written to the current log files.
CBL_CORE_API const C4LogDomain kC4DatabaseLog
Log domain for database operations.
Definition c4Log.h:51
CBL_CORE_API C4LogLevel c4log_callbackLevel(void)
Returns the minimum level of log messages to be reported via callback, regardless of what level indiv...
CBL_CORE_API const C4LogDomain kC4QueryLog
Log domain for query operations.
Definition c4Log.h:52
CBL_CORE_API C4LogLevel c4log_getLevel(C4LogDomain)
Returns the current log level of a domain, the minimum level of message it will log.
CBL_CORE_API FLStringResult c4log_binaryFilePath(void)
Returns the filesystem path of the directory where log files are kept.
CBL_CORE_API C4LogDomain c4log_getDomain(const char *name, bool create)
Looks up a named log domain.
CBL_CORE_API const char * c4log_getDomainName(C4LogDomain)
Returns the name of a log domain.
NODISCARD CBL_CORE_API bool c4log_writeToBinaryFile(C4LogFileOptions options, C4Error *error)
Causes log messages to be written to a file, overwriting any previous contents.
CBL_CORE_API bool c4log_willLog(C4LogDomain, C4LogLevel)
Returns true if logging to this domain at this level will have an effect.
CBL_CORE_API const C4LogDomain kC4SyncLog
Log domain for replication operations.
Definition c4Log.h:53
CBL_CORE_API void c4log_enableFatalExceptionBacktrace(void)
Registers a handler with the C++ runtime that will log a backtrace when an uncaught C++ exception occ...
CBL_CORE_API void CBL_CORE_API void c4vlog(C4LogDomain domain, C4LogLevel level, const char *fmt, va_list args) __printflike(3
Same as c4log, for use in calling functions that already take variable args.
C4LogLevel
Definition c4Log.h:35
CBL_CORE_API const C4LogDomain kC4WebSocketLog
Log domain for WebSocket operations.
Definition c4Log.h:54
CBL_CORE_API void c4log_writeToCallback(C4LogLevel level, C4LogCallback callback, bool preformatted)
Registers (or unregisters) a log callback, and sets the minimum log level to report.
CBL_CORE_API const C4LogDomain kC4DefaultLog
Subsystems that produce logs.
CBL_CORE_API C4LogCallback c4log_getCallback(void)
Returns the current logging callback, or the default one if none has been set.
CBL_CORE_API void c4log_setLevel(C4LogDomain c4Domain, C4LogLevel level)
Changes the level of the given log domain.
CBL_CORE_API void c4log_warnOnErrors(bool)
If set to true, LiteCore will log a warning of the form "LiteCore throwing %s error %d: %s" just befo...
CBL_CORE_API void c4log_setBinaryFileLevel(C4LogLevel level)
Sets the minimum level of log messages to be written to the log file.
CBL_CORE_API void CBL_CORE_API void CBL_CORE_API void c4slog(C4LogDomain domain, C4LogLevel level, FLString msg)
Same as c4log, except it accepts preformatted messages as FLSlices.
CBL_CORE_API void c4log_setCallbackLevel(C4LogLevel level)
Sets the minimum level of log messages to be reported via callback.
void(* C4LogCallback)(C4LogDomain, C4LogLevel, const char *fmt, va_list args)
A logging callback that the application can register.
Definition c4Log.h:95
CBL_CORE_API void c4log(C4LogDomain domain, C4LogLevel level, const char *fmt,...) __printflike(3
Logs a message/warning/error to a specific domain, if its current level is less than or equal to the ...
struct c4LogDomain * C4LogDomain
Reference to a log domain: a specific source of logs that can be enabled or disabled.
Definition c4Log.h:45
@ kC4LogVerbose
Super-verbose messages that are only enabled in debug builds of LiteCore.
Definition c4Log.h:37
@ kC4LogDebug
Definition c4Log.h:36
@ kC4LogNone
Errors that occur; these might be handled internally.
Definition c4Log.h:41
@ kC4LogInfo
More info than you normally want.
Definition c4Log.h:38
@ kC4LogError
Warnings about something unusual that might be a problem.
Definition c4Log.h:40
@ kC4LogWarning
Informational messages.
Definition c4Log.h:39
An error value.
Definition c4Error.h:133
Configuration for file-based logging.
Definition c4Log.h:60
C4LogLevel log_level
The minimum level of message to be logged.
Definition c4Log.h:61
FLString base_path
The path to the binary log file base name (other elements will be added)
Definition c4Log.h:62
bool use_plaintext
Disables binary encoding of the logs (not recommended)
Definition c4Log.h:65
int32_t max_rotate_count
The maximum amount of old log files to keep.
Definition c4Log.h:64
int64_t max_size_bytes
The maximum size of each log file (minimum 1024)
Definition c4Log.h:63
FLString header
Header text to print at the start of every log file.
Definition c4Log.h:66
A simple reference to a block of memory.
Definition FLSlice.h:45
A heap-allocated block of memory returned from an API call.
Definition FLSlice.h:63