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

Annotation of /lbbs/src/log.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.36 - (hide annotations)
Thu Dec 18 02:54:16 2025 UTC (2 months, 4 weeks ago) by sysadm
Branch: MAIN
Changes since 1.35: +6 -2 lines
Content type: text/x-csrc
Add log_debug()

1 sysadm 1.27 /* SPDX-License-Identifier: GPL-3.0-or-later */
2     /*
3     * log
4     * - logger
5     *
6 sysadm 1.28 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 sysadm 1.27 */
8 sysadm 1.1
9 sysadm 1.31 #ifdef HAVE_CONFIG_H
10     #include "config.h"
11     #endif
12    
13 sysadm 1.26 #include "common.h"
14     #include "io.h"
15 sysadm 1.21 #include "log.h"
16 sysadm 1.35 #include <errno.h>
17 sysadm 1.6 #include <stdarg.h>
18 sysadm 1.24 #include <string.h>
19 sysadm 1.6 #include <time.h>
20 sysadm 1.10 #include <unistd.h>
21 sysadm 1.24 #include <sys/types.h>
22 sysadm 1.19
23 sysadm 1.30 enum _log_constant_t
24     {
25     STR_LOG_TIME_MAX_LEN = 50,
26     };
27 sysadm 1.22
28 sysadm 1.33 static char path_common_log[FILE_PATH_LEN];
29     static char path_error_log[FILE_PATH_LEN];
30 sysadm 1.22 static FILE *fp_common_log;
31     static FILE *fp_error_log;
32 sysadm 1.33 static int redir_common_log = 0;
33     static int redir_error_log = 0;
34 sysadm 1.1
35 sysadm 1.29 int log_begin(const char *common_log_file, const char *error_log_file)
36 sysadm 1.1 {
37 sysadm 1.33 strncpy(path_common_log, common_log_file, sizeof(path_common_log) - 1);
38     path_common_log[sizeof(path_common_log) - 1] = '\0';
39     strncpy(path_error_log, error_log_file, sizeof(path_error_log) - 1);
40     path_error_log[sizeof(path_error_log) - 1] = '\0';
41    
42     fp_common_log = fopen(path_common_log, "a");
43 sysadm 1.20 if (fp_common_log == NULL)
44 sysadm 1.11 {
45 sysadm 1.35 fprintf(stderr, "fopen(%s) error: %d\n", path_common_log, errno);
46 sysadm 1.11 return -1;
47     }
48 sysadm 1.1
49 sysadm 1.33 fp_error_log = fopen(path_error_log, "a");
50 sysadm 1.20 if (fp_error_log == NULL)
51 sysadm 1.11 {
52 sysadm 1.35 fprintf(stderr, "fopen(%s) error: %d\n", path_error_log, errno);
53 sysadm 1.11 return -2;
54     }
55 sysadm 1.1
56 sysadm 1.33 redir_common_log = 0;
57     redir_error_log = 0;
58    
59 sysadm 1.11 return 0;
60 sysadm 1.1 }
61    
62 sysadm 1.13 void log_end()
63 sysadm 1.1 {
64 sysadm 1.20 fclose(fp_common_log);
65     fclose(fp_error_log);
66 sysadm 1.1 }
67    
68 sysadm 1.22 inline static void log_head(char *buf, size_t len, int log_level, const char *app_file, int app_line)
69 sysadm 1.2 {
70 sysadm 1.11 time_t t;
71 sysadm 1.18 struct tm gm_tm;
72 sysadm 1.22 char s_time[STR_LOG_TIME_MAX_LEN + 1];
73 sysadm 1.9
74 sysadm 1.18 time(&t);
75     gmtime_r(&t, &gm_tm);
76     strftime(s_time, sizeof(s_time), "%Y-%m-%d %H:%M:%S", &gm_tm);
77 sysadm 1.9
78 sysadm 1.22 if (log_level == LOG_LEVEL_COMMON)
79     {
80     snprintf(buf, len, "[%s] [%d] [INFO] ", s_time, getpid());
81     }
82 sysadm 1.36 else if (log_level == LOG_LEVEL_ERROR)
83 sysadm 1.22 {
84 sysadm 1.23 snprintf(buf, len, "[%s] [%d] [ERROR] [%s:%d] ", s_time, getpid(), app_file, app_line);
85 sysadm 1.22 }
86 sysadm 1.36 else // if (log_level == LOG_LEVEL_DEBUG)
87     {
88     snprintf(buf, len, "[%s] [%d] [DEBUG] [%s:%d] ", s_time, getpid(), app_file, app_line);
89     }
90 sysadm 1.2 }
91    
92 sysadm 1.29 int log_printf(enum log_level_t log_level, const char *app_file, int app_line, const char *format, ...)
93 sysadm 1.1 {
94 sysadm 1.11 va_list args;
95     int retval;
96 sysadm 1.21 char buf[LINE_BUFFER_LEN];
97 sysadm 1.22 FILE *fp_log;
98 sysadm 1.2
99 sysadm 1.36 fp_log = (log_level == LOG_LEVEL_COMMON ? fp_common_log : fp_error_log);
100 sysadm 1.1
101 sysadm 1.22 log_head(buf, sizeof(buf), log_level, app_file, app_line);
102 sysadm 1.14 strncat(buf, format, sizeof(buf) - strnlen(buf, sizeof(buf)));
103 sysadm 1.3
104 sysadm 1.11 va_start(args, format);
105 sysadm 1.22 retval = vfprintf(fp_log, buf, args);
106 sysadm 1.11 va_end(args);
107 sysadm 1.2
108 sysadm 1.22 fflush(fp_log);
109 sysadm 1.1
110 sysadm 1.11 return retval;
111 sysadm 1.1 }
112 sysadm 1.5
113 sysadm 1.20 int log_common_redir(int fd)
114 sysadm 1.5 {
115 sysadm 1.33 redir_common_log = 1;
116 sysadm 1.32 return dup2(fd, fileno(fp_common_log));
117 sysadm 1.5 }
118    
119 sysadm 1.20 int log_error_redir(int fd)
120 sysadm 1.5 {
121 sysadm 1.33 redir_error_log = 1;
122 sysadm 1.32 return dup2(fd, fileno(fp_error_log));
123 sysadm 1.5 }
124 sysadm 1.33
125     int log_restart(void)
126     {
127     FILE *fp;
128    
129     if (!redir_common_log)
130     {
131     fp = fopen(path_common_log, "a");
132     if (fp == NULL)
133     {
134 sysadm 1.35 log_error("fopen(%s) error: %d\n", path_common_log, errno);
135 sysadm 1.33 return -1;
136     }
137     fclose(fp_common_log);
138     fp_common_log = fp;
139     }
140    
141     if (!redir_error_log)
142     {
143     fp = fopen(path_error_log, "a");
144     if (fp == NULL)
145     {
146 sysadm 1.35 log_error("fopen(%s) error: %d\n", path_error_log, errno);
147 sysadm 1.33 return -2;
148     }
149     fclose(fp_error_log);
150     fp_error_log = fp;
151     }
152    
153     return 0;
154     }

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