1 /*
2 * (C) Maint Laboratory 2003-2004
3 * Author: Elohin Igor'
4 * e-mail: maint@unona.ru
5 * fido : 2:5070/222.52
6 * URL : http://maint.unona.ru
7 */
8 #include <stdio.h>
9 #include <syslog.h>
10 #include <stdarg.h>
11 #include <unistd.h>
12 #include <limits.h>
13 #include "../common.h"
14
15 extern int verbose;
16 extern char *prgname;
17 char logname[PATH_MAX];
18 static FILE *logfd;
19
loginit(char * service,char * dir)20 void loginit(char *service, char *dir)
21 {
22 logname[0] = '\0';
23 if (dir != NULL) {
24 snprintf(logname, sizeof(logname), "%s/%s", dir, service);
25 if ((logfd = fopen(logname, "w+")) == NULL) {
26 fprintf(stderr, "Warning: Cannot open %s. Use syslog\n",
27 logname);
28 logname[0] = '\0';
29 service = "news";
30 } else
31 return;
32 }
33 logname[0] = '\0';
34 openlog(service, LOG_CONS | LOG_NDELAY, LOG_NEWS);
35 }
36
logclose()37 void logclose()
38 {
39 if (logname[0] != '\0') {
40 fflush(logfd);
41 fclose(logfd);
42 logname[0] = '\0';
43 } else {
44 closelog();
45 }
46 }
myerror(const char * fmt,...)47 void myerror(const char *fmt, ...)
48 {
49 va_list ap;
50 char out[MSGBUF];
51
52 va_start(ap, fmt);
53 vsnprintf(out, MSGBUF, fmt, ap);
54 va_end(ap);
55
56 if (verbose == 1) {
57 fprintf(stderr, "%s\n", out);
58 fflush(stderr);
59 }
60 if (logname[0] != '\0'){
61 fprintf(logfd, "%s %s: %s\n", diagtime(), prgname, out);
62 fflush(logfd);
63 } else
64 syslog(LOG_ERR, "%s: %s", prgname, out);
65 }
message(const char * fmt,...)66 void message(const char *fmt, ...)
67 {
68 va_list ap;
69 char out[MSGBUF];
70
71 va_start(ap, fmt);
72 vsnprintf(out, MSGBUF, fmt, ap);
73 va_end(ap);
74
75 if (verbose == 1) {
76 fprintf(stderr, "%s\n", out);
77 fflush(stderr);
78 }
79 if (logname[0] != '\0'){
80 fprintf(logfd, "%s %s: %s\n", diagtime(), prgname, out);
81 fflush(logfd);
82 } else
83 syslog(LOG_INFO, "%s: %s", prgname, out);
84 }
notice(const char * fmt,...)85 void notice(const char *fmt, ...)
86 {
87 va_list ap;
88 char out[MSGBUF];
89
90 va_start(ap, fmt);
91 vsnprintf(out, MSGBUF, fmt, ap);
92 va_end(ap);
93
94 if (verbose == 1) {
95 fprintf(stderr, "%s\n", out);
96 fflush(stderr);
97 }
98 if (logname[0] != '\0'){
99 fprintf(logfd, "%s %s: %s\n", diagtime(), prgname, out);
100 fflush(logfd);
101 } else
102 syslog(LOG_NOTICE, "%s: %s", prgname, out);
103 }
dolog(int flag,const char * fmt,...)104 void dolog(int flag, const char *fmt, ...)
105 {
106 va_list ap;
107 char out[MSGBUF];
108
109 va_start(ap, fmt);
110 vsnprintf(out, MSGBUF, fmt, ap);
111 va_end(ap);
112
113 if (verbose == 1) {
114 fprintf(stderr, "%s\n", out);
115 fflush(stderr);
116 }
117 if (logname[0] != '\0'){
118 fprintf(logfd, "%s %s: %s\n", diagtime(), prgname, out);
119 fflush(logfd);
120 } else
121 syslog(flag, "%s: %s", prgname, out);
122 }
123