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

Contents of /lbbs/src/log.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (show annotations)
Sat Jun 21 02:15:18 2025 UTC (8 months, 3 weeks ago) by sysadm
Branch: MAIN
Changes since 1.25: +2 -2 lines
Content type: text/x-csrc
Re-order included order files

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

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