Commit | Line | Data |
---|---|---|
ac9b9101 JA |
1 | #include <unistd.h> |
2 | #include <fcntl.h> | |
3 | #include <string.h> | |
4 | #include <stdarg.h> | |
e46d8091 | 5 | #include <syslog.h> |
3c39a379 | 6 | |
ac9b9101 | 7 | #include "fio.h" |
3c39a379 | 8 | |
7d64aa48 JA |
9 | #define LOG_START_SZ 512 |
10 | ||
830814d4 JA |
11 | size_t log_info_buf(const char *buf, size_t len) |
12 | { | |
3dc3aa41 TK |
13 | /* |
14 | * buf could be NULL (not just ""). | |
15 | */ | |
16 | if (!buf) | |
17 | return 0; | |
18 | ||
408e0b90 JA |
19 | if (is_backend) { |
20 | size_t ret = fio_server_text_output(FIO_LOG_INFO, buf, len); | |
21 | if (ret != -1) | |
22 | return ret; | |
23 | } | |
24 | ||
25 | if (log_syslog) { | |
830814d4 JA |
26 | syslog(LOG_INFO, "%s", buf); |
27 | return len; | |
28 | } else | |
29 | return fwrite(buf, len, 1, f_out); | |
30 | } | |
31 | ||
5768cc2b | 32 | size_t log_valist(const char *str, va_list args) |
e46d8091 | 33 | { |
7d64aa48 JA |
34 | size_t len, cur = LOG_START_SZ; |
35 | char *buffer; | |
36 | ||
37 | do { | |
38 | buffer = calloc(1, cur); | |
39 | ||
40 | len = vsnprintf(buffer, cur, str, args); | |
c78e8496 | 41 | if (len < cur) |
7d64aa48 | 42 | break; |
734f38cb | 43 | |
c78e8496 | 44 | cur = len + 1; |
7d64aa48 JA |
45 | free(buffer); |
46 | } while (1); | |
734f38cb | 47 | |
7d64aa48 JA |
48 | cur = log_info_buf(buffer, len); |
49 | free(buffer); | |
50 | ||
51 | return cur; | |
e46d8091 JA |
52 | } |
53 | ||
5768cc2b | 54 | size_t log_info(const char *format, ...) |
3c39a379 | 55 | { |
7d64aa48 JA |
56 | size_t len, cur = LOG_START_SZ; |
57 | char *buffer; | |
ac9b9101 | 58 | va_list args; |
3c39a379 | 59 | |
7d64aa48 JA |
60 | do { |
61 | buffer = calloc(1, cur); | |
62 | ||
63 | va_start(args, format); | |
64 | len = vsnprintf(buffer, cur, format, args); | |
65 | va_end(args); | |
f29b25a3 | 66 | |
c78e8496 | 67 | if (len < cur) |
7d64aa48 JA |
68 | break; |
69 | ||
c78e8496 | 70 | cur = len + 1; |
7d64aa48 JA |
71 | free(buffer); |
72 | } while (1); | |
73 | ||
74 | cur = log_info_buf(buffer, len); | |
75 | free(buffer); | |
76 | ||
77 | return cur; | |
f29b25a3 JA |
78 | } |
79 | ||
5768cc2b | 80 | size_t __log_buf(struct buf_output *buf, const char *format, ...) |
a666cab8 | 81 | { |
7d64aa48 JA |
82 | size_t len, cur = LOG_START_SZ; |
83 | char *buffer; | |
a666cab8 | 84 | va_list args; |
a666cab8 | 85 | |
7d64aa48 JA |
86 | do { |
87 | buffer = calloc(1, cur); | |
88 | ||
89 | va_start(args, format); | |
90 | len = vsnprintf(buffer, cur, format, args); | |
91 | va_end(args); | |
92 | ||
c78e8496 | 93 | if (len < cur) |
7d64aa48 | 94 | break; |
a666cab8 | 95 | |
c78e8496 | 96 | cur = len + 1; |
7d64aa48 JA |
97 | free(buffer); |
98 | } while (1); | |
99 | ||
100 | cur = buf_output_add(buf, buffer, len); | |
101 | free(buffer); | |
102 | ||
103 | return cur; | |
a666cab8 JA |
104 | } |
105 | ||
fdd5f15f VKF |
106 | int log_info_flush(void) |
107 | { | |
108 | if (is_backend || log_syslog) | |
109 | return 0; | |
110 | ||
111 | return fflush(f_out); | |
112 | } | |
113 | ||
5768cc2b | 114 | size_t log_err(const char *format, ...) |
fb71fbd7 | 115 | { |
7d64aa48 JA |
116 | size_t ret, len, cur = LOG_START_SZ; |
117 | char *buffer; | |
ac9b9101 | 118 | va_list args; |
f29b25a3 | 119 | |
7d64aa48 JA |
120 | do { |
121 | buffer = calloc(1, cur); | |
122 | ||
123 | va_start(args, format); | |
124 | len = vsnprintf(buffer, cur, format, args); | |
125 | va_end(args); | |
126 | ||
c78e8496 | 127 | if (len < cur) |
7d64aa48 JA |
128 | break; |
129 | ||
c78e8496 | 130 | cur = len + 1; |
7d64aa48 JA |
131 | free(buffer); |
132 | } while (1); | |
133 | ||
fb71fbd7 | 134 | |
408e0b90 | 135 | if (is_backend) { |
7d64aa48 | 136 | ret = fio_server_text_output(FIO_LOG_ERR, buffer, len); |
408e0b90 | 137 | if (ret != -1) |
7d64aa48 | 138 | goto done; |
408e0b90 JA |
139 | } |
140 | ||
141 | if (log_syslog) { | |
13755d94 | 142 | syslog(LOG_INFO, "%s", buffer); |
7d64aa48 | 143 | ret = len; |
13755d94 | 144 | } else { |
7d64aa48 | 145 | if (f_err != stderr) |
1f39e555 | 146 | ret = fwrite(buffer, len, 1, stderr); |
fb71fbd7 | 147 | |
7d64aa48 | 148 | ret = fwrite(buffer, len, 1, f_err); |
f29b25a3 | 149 | } |
7d64aa48 JA |
150 | |
151 | done: | |
152 | free(buffer); | |
153 | return ret; | |
e3cedca7 | 154 | } |
3ad04399 JA |
155 | |
156 | const char *log_get_level(int level) | |
157 | { | |
158 | static const char *levels[] = { "Unknown", "Debug", "Info", "Error", | |
159 | "Unknown" }; | |
160 | ||
161 | if (level >= FIO_LOG_NR) | |
162 | level = FIO_LOG_NR; | |
163 | ||
164 | return levels[level]; | |
165 | } |