t/nvmept_trim: increase transfer size for some tests
[fio.git] / log.c
1 #include "log.h"
2
3 #include <unistd.h>
4 #include <string.h>
5 #include <stdarg.h>
6 #include <syslog.h>
7
8 #include "fio.h"
9 #include "oslib/asprintf.h"
10
11 size_t log_info_buf(const char *buf, size_t len)
12 {
13         /*
14          * buf could be NULL (not just "").
15          */
16         if (!buf)
17                 return 0;
18
19         if (is_backend) {
20                 ssize_t ret = fio_server_text_output(FIO_LOG_INFO, buf, len);
21                 if (ret != -1)
22                         return ret;
23         }
24
25         if (log_syslog) {
26                 syslog(LOG_INFO, "%s", buf);
27                 return len;
28         } else
29                 return fwrite(buf, len, 1, f_out);
30 }
31
32 size_t log_valist(const char *fmt, va_list args)
33 {
34         char *buffer;
35         int len;
36
37         len = vasprintf(&buffer, fmt, args);
38         if (len < 0)
39                 return 0;
40         len = log_info_buf(buffer, len);
41         free(buffer);
42
43         return len;
44 }
45
46 /* add prefix for the specified type in front of the valist */
47 #ifdef FIO_INC_DEBUG
48 void log_prevalist(int type, const char *fmt, va_list args)
49 {
50         char *buf1, *buf2;
51         int len;
52         pid_t pid;
53
54         pid = gettid();
55         if (fio_debug_jobp && *fio_debug_jobp != -1U
56             && pid != *fio_debug_jobp)
57                 return;
58
59         len = vasprintf(&buf1, fmt, args);
60         if (len < 0)
61                 return;
62         len = asprintf(&buf2, "%-8s %-5u %s", debug_levels[type].name,
63                        (int) pid, buf1);
64         free(buf1);
65         if (len < 0)
66                 return;
67         log_info_buf(buf2, len);
68         free(buf2);
69 }
70 #endif
71
72 ssize_t log_info(const char *format, ...)
73 {
74         va_list args;
75         ssize_t ret;
76
77         va_start(args, format);
78         ret = log_valist(format, args);
79         va_end(args);
80
81         return ret;
82 }
83
84 size_t __log_buf(struct buf_output *buf, const char *format, ...)
85 {
86         char *buffer;
87         va_list args;
88         int len;
89
90         va_start(args, format);
91         len = vasprintf(&buffer, format, args);
92         va_end(args);
93         if (len < 0)
94                 return 0;
95         len = buf_output_add(buf, buffer, len);
96         free(buffer);
97
98         return len;
99 }
100
101 int log_info_flush(void)
102 {
103         if (is_backend || log_syslog)
104                 return 0;
105
106         return fflush(f_out);
107 }
108
109 ssize_t log_err(const char *format, ...)
110 {
111         ssize_t ret;
112         int len;
113         char *buffer;
114         va_list args;
115
116         va_start(args, format);
117         len = vasprintf(&buffer, format, args);
118         va_end(args);
119         if (len < 0)
120                 return len;
121
122         if (is_backend) {
123                 ret = fio_server_text_output(FIO_LOG_ERR, buffer, len);
124                 if (ret != -1)
125                         goto done;
126         }
127
128         if (log_syslog) {
129                 syslog(LOG_INFO, "%s", buffer);
130                 ret = len;
131         } else {
132                 if (f_err != stderr)
133                         ret = fwrite(buffer, len, 1, stderr);
134
135                 ret = fwrite(buffer, len, 1, f_err);
136         }
137
138 done:
139         free(buffer);
140         return ret;
141 }
142
143 const char *log_get_level(int level)
144 {
145         static const char *levels[] = { "Unknown", "Debug", "Info", "Error",
146                                                 "Unknown" };
147
148         if (level >= FIO_LOG_NR)
149                 level = FIO_LOG_NR;
150
151         return levels[level];
152 }