Derive-C
Loading...
Searching...
No Matches
log.c File Reference

Go to the source code of this file.

Macros

#define ITEM   dc_log_file
#define ITEM_DELETE   dc_log_file_delete
#define NAME   logger_vec

Functions

static void example_1 (dc_log_file *parent)
static void example_2 (dc_log_file *parent)
static void example_3 (dc_log_file *parent)
static void example_4 (dc_log_file *parent)
int main ()

Macro Definition Documentation

◆ ITEM

#define ITEM   dc_log_file

Definition at line 9 of file log.c.

◆ ITEM_DELETE

#define ITEM_DELETE   dc_log_file_delete

Definition at line 10 of file log.c.

◆ NAME

#define NAME   logger_vec

Definition at line 11 of file log.c.

Function Documentation

◆ example_1()

void example_1 ( dc_log_file * parent)
static
Examples
utils/log.c.

Definition at line 14 of file log.c.

14 {
15 DC_SCOPED(dc_log_file) demo = DC_LOGGER_NEW(parent, "%s", "demo");
16
17 DC_SCOPED(logger_vec) loggers = logger_vec_new(stdalloc_get_ref());
18
19 for (int i = 1; i <= 5; i++) {
20 dc_log_file logger = DC_LOGGER_NEW(&demo, "logger_%d", i);
21 logger_vec_push(&loggers, logger);
22 }
23
24 DC_FOR(logger_vec, &loggers, iter, logger) { DC_LOG(*logger, DC_INFO, "hello world"); }
25}
struct _dc_log_file dc_log_file
#define DC_FOR(TYPE, INSTANCE, ITER, ITEM)
Definition for.h:13
#define DC_SCOPED(type,...)
RAII in C. Call the destructor when the variable goes out of scope.
Definition scope.h:5
#define DC_LOGGER_NEW(...)
Definition prelude.h:21
#define DC_LOG(...)
Definition prelude.h:20
@ DC_INFO
Definition trait.h:8

◆ example_2()

void example_2 ( dc_log_file * parent)
static
Examples
utils/log.c.

Definition at line 27 of file log.c.

27 {
28 DC_SCOPED(dc_log_file) foo = DC_LOGGER_NEW(parent, "%s", "foo");
29
31 DC_LOG(foo, DC_DEBUG, "this debug message is visible");
32
34 DC_LOG(foo, DC_DEBUG, "this debug message is filtered out");
35 DC_LOG(foo, DC_INFO, "this info message is visible");
36}
#define DC_DEBUG(DEBUG_FN, DEBUG_PTR)
Definition dump.h:92
static DC_PUBLIC void dc_log_file_set_filter(dc_log_file *self, dc_log_level level)
Definition file.h:108

◆ example_3()

void example_3 ( dc_log_file * parent)
static
Examples
utils/log.c.

Definition at line 38 of file log.c.

38 {
39 DC_SCOPED(dc_log_file) level1 = DC_LOGGER_NEW(parent, "%s", "level1");
40 DC_SCOPED(dc_log_file) level2 = DC_LOGGER_NEW(&level1, "%s", "level2");
41 DC_SCOPED(dc_log_file) level3 = DC_LOGGER_NEW(&level2, "%s", "level3");
42 DC_SCOPED(dc_log_file) level4 = DC_LOGGER_NEW(&level3, "%s", "level4");
43
44 DC_LOG(level4, DC_INFO, "logger debug info:\n%s", DC_DEBUG(dc_log_file_debug, &level4));
45}
static DC_PUBLIC void dc_log_file_debug(dc_log_file const *self, dc_debug_fmt fmt, FILE *stream)
Definition file.h:144

◆ example_4()

void example_4 ( dc_log_file * parent)
static
Examples
utils/log.c.

Definition at line 47 of file log.c.

47 {
48 DC_SCOPED(dc_log_file) levels = DC_LOGGER_NEW(parent, "%s", "levels");
49
51
52 DC_LOG(levels, DC_TRACE, "this is a trace message");
53 DC_LOG(levels, DC_DEBUG, "this is a debug message");
54 DC_LOG(levels, DC_INFO, "this is an info message");
55 DC_LOG(levels, DC_WARN, "this is a warning message");
56 DC_LOG(levels, DC_ERROR, "this is an error message");
57}
@ DC_TRACE
Definition trait.h:6
@ DC_ERROR
Definition trait.h:10
@ DC_WARN
Definition trait.h:9

◆ main()

int main ( )

Definition at line 59 of file log.c.

59 {
61 root = NS(DC_LOGGER,
62 new_global)((NS(DC_LOGGER, global_config)){.stream = stdout, .ansi_colours = true},
63 (dc_log_id){"root"});
65
66 example_1(&root);
67 example_2(&root);
68 example_3(&root);
69 example_4(&root);
70 return 0;
71}
#define DC_LOGGER
Definition file.h:168
static void example_1(dc_log_file *parent)
Definition log.c:14
static void example_4(dc_log_file *parent)
Definition log.c:47
static void example_2(dc_log_file *parent)
Definition log.c:27
static void example_3(dc_log_file *parent)
Definition log.c:38
#define NS(pre, post)
Definition namespace.h:14