blob: 05809b7c785e81f3938306f01148e3ad2477f971 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/************************************************************************
2 * Id: log.c *
3 * *
4 * TR069 Project: A TR069 library in C *
5 * Copyright (C) 2013-2014 netcwmp.netcwmp group *
6 * *
7 * *
8 * Email: netcwmp ( & ) gmail dot com *
9 * *
10 ***********************************************************************/
11
12
13#include <stdlib.h>
14#include <stdio.h>
15#include <stdarg.h>
16#include <string.h>
17#include "cwmp/log.h"
18
19#include <syslog.h>
20
21
22struct cwmp_log_t
23{
24 FILE * file;
25 int level;
26 char * name;
27 int file_no;
28 long max_size;
29};
30
31static cwmp_log_t g_cwmp_log_file;
32static cwmp_log_t * g_ot_log_file_ptr;
33
34
35//¶ÁÈ¡LogÅäÖÃÎļþ
36
37int cwmp_log_init(const char * filename, int level)
38{
39
40 g_cwmp_log_file.file = NULL;
41 g_cwmp_log_file.name = NULL;
42 if (filename)
43 {
44 g_cwmp_log_file.file = fopen(filename,"a+");
45 g_cwmp_log_file.name = strdup(filename);
46 }
47
48 if (g_cwmp_log_file.file == NULL)
49 {
50 g_cwmp_log_file.file = stdout;
51 }
52
53 g_cwmp_log_file.level = level;
54
55 g_cwmp_log_file.file_no = fileno(g_cwmp_log_file.file);
56
57 g_cwmp_log_file.max_size = 512*1024;
58
59 g_ot_log_file_ptr = &g_cwmp_log_file;
60
61 return 0;
62}
63
64void cwmp_log_fini()
65{
66 if (g_cwmp_log_file.name)
67 {
68 free(g_cwmp_log_file.name);
69 }
70
71 if ((g_cwmp_log_file.file != stdout) && (g_cwmp_log_file.file != NULL))
72 {
73 fclose(g_cwmp_log_file.file);
74 }
75
76 g_cwmp_log_file.file_no = -1;
77
78}
79
80void cwmp_log_console(int level, cwmp_log_t * log, const char * fmt, va_list ap)
81{
82 int priority = 0;
83 char buf[1024] = {0};
84
85 switch(level)
86 {
87 case CWMP_LOG_STDERR:
88 priority = LOG_DEBUG;
89 break;
90
91 case CWMP_LOG_EMERG:
92 priority = LOG_EMERG;
93 break;
94
95 case CWMP_LOG_ALERT:
96 priority = LOG_ALERT;
97 break;
98
99 case CWMP_LOG_CRIT:
100 priority = LOG_CRIT;
101 break;
102
103 case CWMP_LOG_ERROR:
104 priority = LOG_ERR;
105 break;
106
107 case CWMP_LOG_WARN:
108 priority = LOG_WARNING;
109 break;
110
111 case CWMP_LOG_NOTICE:
112 priority = LOG_NOTICE;
113 break;
114
115 case CWMP_LOG_INFO:
116 priority = LOG_INFO;
117 break;
118
119 case CWMP_LOG_TRACE:
120 priority = LOG_INFO;
121 break;
122
123 case CWMP_LOG_DEBUG:
124 priority = LOG_DEBUG;
125 break;
126
127 default:
128 priority = LOG_DEBUG;
129 break;
130 }
131
132// vsyslog(priority, fmt, ap);
133
134 vsnprintf(buf, 1023, fmt, ap);
135 printf("%s",buf);
136}
137
138void cwmp_log_write(int level, cwmp_log_t * log, const char * fmt, va_list ap)
139{
140 cwmp_log_t * logger;
141 long cur_log_size = 0;
142
143 if (log)
144 {
145 if (log->level < level )
146 {
147 return;
148 }
149 }
150 else
151 {
152 if (g_cwmp_log_file.level < level)
153 {
154 return;
155 }
156 }
157
158 logger = g_ot_log_file_ptr;
159
160 vfprintf(logger->file, fmt, ap);
161 fprintf(logger->file, "\n");
162
163 fflush(logger->file);
164
165 fsync(logger->file_no);
166
167 fseek(logger->file, 0, SEEK_END);
168
169 cur_log_size = ftell(logger->file);
170
171 if(cur_log_size > logger->max_size)
172 {
173 char buf[1024] = {0};
174 cur_log_size = 0;
175 fclose(logger->file);
176 snprintf(buf, 1023, "%s_bak", g_cwmp_log_file.name);
177 if(rename(g_cwmp_log_file.name, buf) < 0)
178 {
179 printf("Rename fail!");
180 }
181
182 g_cwmp_log_file.file = fopen(g_cwmp_log_file.name,"a+");
183
184 if (g_cwmp_log_file.file == NULL)
185 {
186 g_cwmp_log_file.file = stdout;
187 }
188 g_cwmp_log_file.file_no = fileno(g_cwmp_log_file.file);
189 }
190
191}
192
193void cwmp_log_tracer_src(int level, cwmp_log_t * log,const char * fmt, ...)
194{
195 va_list ap = {0};
196
197 va_start(ap, fmt);
198 cwmp_log_console(level, log, fmt, ap);
199 cwmp_log_write(level, log, fmt, ap);
200 va_end(ap);
201
202}
203
204void cwmp_log_debug_src(const char * fmt, ...)
205{
206 va_list ap = {0};
207 if (g_ot_log_file_ptr->level < CWMP_LOG_DEBUG)
208 return;
209
210 va_start(ap, fmt);
211 cwmp_log_console(CWMP_LOG_DEBUG, g_ot_log_file_ptr, fmt, ap);
212 cwmp_log_write(CWMP_LOG_DEBUG, g_ot_log_file_ptr, fmt, ap);
213 va_end(ap);
214}
215
216void cwmp_log_info_src(const char * fmt, ...)
217{
218 va_list ap = {0};
219 if (g_ot_log_file_ptr->level < CWMP_LOG_INFO)
220 return;
221
222 va_start(ap, fmt);
223 cwmp_log_console(CWMP_LOG_INFO, g_ot_log_file_ptr, fmt, ap);
224 cwmp_log_write(CWMP_LOG_INFO, g_ot_log_file_ptr, fmt, ap);
225 va_end(ap);
226}
227
228void cwmp_log_error_src(const char * fmt, ...)
229{
230 va_list ap = {0};
231 if (g_ot_log_file_ptr->level < CWMP_LOG_ERROR)
232 return;
233
234 va_start(ap, fmt);
235 cwmp_log_console(CWMP_LOG_ERROR, g_ot_log_file_ptr, fmt, ap);
236 cwmp_log_write(CWMP_LOG_ERROR, g_ot_log_file_ptr, fmt, ap);
237 va_end(ap);
238}
239
240void cwmp_log_alert_src(const char * fmt, ...)
241{
242 va_list ap = {0};
243 if (g_ot_log_file_ptr->level < CWMP_LOG_ALERT)
244 return;
245
246 va_start(ap, fmt);
247 cwmp_log_console(CWMP_LOG_ALERT, g_ot_log_file_ptr, fmt, ap);
248 cwmp_log_write(CWMP_LOG_ALERT, g_ot_log_file_ptr, fmt, ap);
249 va_end(ap);
250}
251
252void cwmp_log_critical_src(const char * fmt, ...)
253{
254 va_list ap = {0};
255 if (g_ot_log_file_ptr->level < CWMP_LOG_CRIT)
256 return;
257
258 va_start(ap, fmt);
259 cwmp_log_console(CWMP_LOG_CRIT, g_ot_log_file_ptr, fmt, ap);
260 cwmp_log_write(CWMP_LOG_CRIT, g_ot_log_file_ptr, fmt, ap);
261 va_end(ap);
262}
263