forked from getsentry/sentry-native
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsentry_logger.c
More file actions
121 lines (106 loc) · 2.66 KB
/
Copy pathsentry_logger.c
File metadata and controls
121 lines (106 loc) · 2.66 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "sentry_logger.h"
#include "sentry_core.h"
#include "sentry_string.h"
#include "sentry_sync.h"
#include <stdio.h>
#include <string.h>
static sentry_logger_t g_logger = { NULL, NULL, SENTRY_LEVEL_DEBUG };
static volatile long g_logger_enabled = 1;
void
sentry__logger_set_global(sentry_logger_t logger)
{
g_logger = logger;
}
#if defined(SENTRY_PLATFORM_ANDROID)
# include <android/log.h>
void
sentry__logger_defaultlogger(
sentry_level_t level, const char *message, va_list args, void *UNUSED(data))
{
android_LogPriority priority = ANDROID_LOG_UNKNOWN;
switch (level) {
case SENTRY_LEVEL_DEBUG:
priority = ANDROID_LOG_DEBUG;
break;
case SENTRY_LEVEL_INFO:
priority = ANDROID_LOG_INFO;
break;
case SENTRY_LEVEL_WARNING:
priority = ANDROID_LOG_WARN;
break;
case SENTRY_LEVEL_ERROR:
priority = ANDROID_LOG_ERROR;
break;
case SENTRY_LEVEL_FATAL:
priority = ANDROID_LOG_FATAL;
break;
default:
break;
}
__android_log_vprint(priority, "sentry-native", message, args);
}
#else
void
sentry__logger_defaultlogger(
sentry_level_t level, const char *message, va_list args, void *UNUSED(data))
{
const char *prefix = "[sentry] ";
const char *priority = sentry__logger_describe(level);
size_t len = strlen(prefix) + strlen(priority)
+ sentry__guarded_strlen(message) + 2;
char *format = sentry_malloc(len);
if (!format) {
return;
}
snprintf(format, len, "%s%s%s\n", prefix, priority, message);
vfprintf(stderr, format, args);
sentry_free(format);
}
#endif
const char *
sentry__logger_describe(sentry_level_t level)
{
switch (level) {
case SENTRY_LEVEL_TRACE:
return "TRACE ";
case SENTRY_LEVEL_DEBUG:
return "DEBUG ";
case SENTRY_LEVEL_INFO:
return "INFO ";
case SENTRY_LEVEL_WARNING:
return "WARN ";
case SENTRY_LEVEL_ERROR:
return "ERROR ";
case SENTRY_LEVEL_FATAL:
return "FATAL ";
default:
return "UNKNOWN ";
}
}
void
sentry__logger_log(sentry_level_t level, const char *message, ...)
{
if (!sentry__atomic_fetch(&g_logger_enabled)) {
return;
}
if (level < g_logger.logger_level) {
return;
}
sentry_logger_t logger = g_logger;
if (logger.logger_func) {
va_list args;
va_start(args, message);
logger.logger_func(level, message, args, logger.logger_data);
va_end(args);
}
}
void
sentry__logger_enable(void)
{
sentry__atomic_store(&g_logger_enabled, 1);
}
void
sentry__logger_disable(void)
{
sentry__atomic_store(&g_logger_enabled, 0);
}