/[LeafOK_CVS]/lbbs/src/log.c
ViewVC logotype

Contents of /lbbs/src/log.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (show annotations)
Wed Nov 5 01:37:00 2025 UTC (4 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.28: +2 -2 lines
Content type: text/x-csrc
Use enum instead of macro define for constant integers in common.h
Use const char * instead of macro define for constant strings in common.h

1 /* SPDX-License-Identifier: GPL-3.0-or-later */
2 /*
3 * log
4 * - logger
5 *
6 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 */
8
9 #include "common.h"
10 #include "io.h"
11 #include "log.h"
12 #include <stdarg.h>
13 #include <string.h>
14 #include <time.h>
15 #include <unistd.h>
16 #include <sys/types.h>
17
18 #define STR_LOG_TIME_MAX_LEN 50
19
20 static FILE *fp_common_log;
21 static FILE *fp_error_log;
22
23 int log_begin(const char *common_log_file, const char *error_log_file)
24 {
25 fp_common_log = fopen(common_log_file, "a");
26 if (fp_common_log == NULL)
27 {
28 perror("log_begin failed\n");
29 return -1;
30 }
31
32 fp_error_log = fopen(error_log_file, "a");
33 if (fp_error_log == NULL)
34 {
35 perror("log_begin failed\n");
36 return -2;
37 }
38
39 return 0;
40 }
41
42 void log_end()
43 {
44 fclose(fp_common_log);
45 fclose(fp_error_log);
46 }
47
48 inline static void log_head(char *buf, size_t len, int log_level, const char *app_file, int app_line)
49 {
50 time_t t;
51 struct tm gm_tm;
52 char s_time[STR_LOG_TIME_MAX_LEN + 1];
53
54 time(&t);
55 gmtime_r(&t, &gm_tm);
56 strftime(s_time, sizeof(s_time), "%Y-%m-%d %H:%M:%S", &gm_tm);
57
58 if (log_level == LOG_LEVEL_COMMON)
59 {
60 snprintf(buf, len, "[%s] [%d] [INFO] ", s_time, getpid());
61 }
62 else // if (log_level == LOG_LEVEL_ERROR)
63 {
64 snprintf(buf, len, "[%s] [%d] [ERROR] [%s:%d] ", s_time, getpid(), app_file, app_line);
65 }
66 }
67
68 int log_printf(enum log_level_t log_level, const char *app_file, int app_line, const char *format, ...)
69 {
70 va_list args;
71 int retval;
72 char buf[LINE_BUFFER_LEN];
73 FILE *fp_log;
74
75 fp_log = (log_level == LOG_LEVEL_ERROR ? fp_error_log : fp_common_log);
76
77 log_head(buf, sizeof(buf), log_level, app_file, app_line);
78 strncat(buf, format, sizeof(buf) - strnlen(buf, sizeof(buf)));
79
80 va_start(args, format);
81 retval = vfprintf(fp_log, buf, args);
82 va_end(args);
83
84 fflush(fp_log);
85
86 return retval;
87 }
88
89 int log_common_redir(int fd)
90 {
91 int ret;
92 close(fileno(fp_common_log));
93 ret = dup2(fd, fileno(fp_common_log));
94 return ret;
95 }
96
97 int log_error_redir(int fd)
98 {
99 int ret;
100 close(fileno(fp_error_log));
101 ret = dup2(fd, fileno(fp_error_log));
102 return ret;
103 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1