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

Contents of /lbbs/src/log.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.33 - (show annotations)
Sun Nov 16 02:05:07 2025 UTC (4 months ago) by sysadm
Branch: MAIN
Changes since 1.32: +49 -4 lines
Content type: text/x-csrc
Add log_restart()

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 #ifdef HAVE_CONFIG_H
10 #include "config.h"
11 #endif
12
13 #include "common.h"
14 #include "io.h"
15 #include "log.h"
16 #include <stdarg.h>
17 #include <string.h>
18 #include <time.h>
19 #include <unistd.h>
20 #include <sys/types.h>
21
22 enum _log_constant_t
23 {
24 STR_LOG_TIME_MAX_LEN = 50,
25 };
26
27 static char path_common_log[FILE_PATH_LEN];
28 static char path_error_log[FILE_PATH_LEN];
29 static FILE *fp_common_log;
30 static FILE *fp_error_log;
31 static int redir_common_log = 0;
32 static int redir_error_log = 0;
33
34 int log_begin(const char *common_log_file, const char *error_log_file)
35 {
36 strncpy(path_common_log, common_log_file, sizeof(path_common_log) - 1);
37 path_common_log[sizeof(path_common_log) - 1] = '\0';
38 strncpy(path_error_log, error_log_file, sizeof(path_error_log) - 1);
39 path_error_log[sizeof(path_error_log) - 1] = '\0';
40
41 fp_common_log = fopen(path_common_log, "a");
42 if (fp_common_log == NULL)
43 {
44 perror("log_begin(common_log) failed\n");
45 return -1;
46 }
47
48 fp_error_log = fopen(path_error_log, "a");
49 if (fp_error_log == NULL)
50 {
51 perror("log_begin(error_log) failed\n");
52 return -2;
53 }
54
55 redir_common_log = 0;
56 redir_error_log = 0;
57
58 return 0;
59 }
60
61 void log_end()
62 {
63 fclose(fp_common_log);
64 fclose(fp_error_log);
65 }
66
67 inline static void log_head(char *buf, size_t len, int log_level, const char *app_file, int app_line)
68 {
69 time_t t;
70 struct tm gm_tm;
71 char s_time[STR_LOG_TIME_MAX_LEN + 1];
72
73 time(&t);
74 gmtime_r(&t, &gm_tm);
75 strftime(s_time, sizeof(s_time), "%Y-%m-%d %H:%M:%S", &gm_tm);
76
77 if (log_level == LOG_LEVEL_COMMON)
78 {
79 snprintf(buf, len, "[%s] [%d] [INFO] ", s_time, getpid());
80 }
81 else // if (log_level == LOG_LEVEL_ERROR)
82 {
83 snprintf(buf, len, "[%s] [%d] [ERROR] [%s:%d] ", s_time, getpid(), app_file, app_line);
84 }
85 }
86
87 int log_printf(enum log_level_t log_level, const char *app_file, int app_line, const char *format, ...)
88 {
89 va_list args;
90 int retval;
91 char buf[LINE_BUFFER_LEN];
92 FILE *fp_log;
93
94 fp_log = (log_level == LOG_LEVEL_ERROR ? fp_error_log : fp_common_log);
95
96 log_head(buf, sizeof(buf), log_level, app_file, app_line);
97 strncat(buf, format, sizeof(buf) - strnlen(buf, sizeof(buf)));
98
99 va_start(args, format);
100 retval = vfprintf(fp_log, buf, args);
101 va_end(args);
102
103 fflush(fp_log);
104
105 return retval;
106 }
107
108 int log_common_redir(int fd)
109 {
110 redir_common_log = 1;
111 return dup2(fd, fileno(fp_common_log));
112 }
113
114 int log_error_redir(int fd)
115 {
116 redir_error_log = 1;
117 return dup2(fd, fileno(fp_error_log));
118 }
119
120 int log_restart(void)
121 {
122 FILE *fp;
123
124 if (!redir_common_log)
125 {
126 fp = fopen(path_common_log, "a");
127 if (fp == NULL)
128 {
129 log_error("fopen(%s) error\n", path_common_log);
130 return -1;
131 }
132 fclose(fp_common_log);
133 fp_common_log = fp;
134 }
135
136 if (!redir_error_log)
137 {
138 fp = fopen(path_error_log, "a");
139 if (fp == NULL)
140 {
141 log_error("fopen(%s) error\n", path_error_log);
142 return -2;
143 }
144 fclose(fp_error_log);
145 fp_error_log = fp;
146 }
147
148 return 0;
149 }

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