Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/utils.c @ 374:bd5638c21834
Improve logging system (traces)
There are now two trace logging levels:
* tracelog_level = 1:
Most messages from the log window are written to disk (LPRINT_LOG)
* tracelog_level =2:
LPRINT_LOG & LPRINT_DEBUG messages are written to disk
The trace file name is set with the "tracelog_file" option.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Mon, 25 Jul 2005 21:46:35 +0100 |
parents | 33b8e801ffa6 |
children | 2e6c7b1440d1 |
comparison
equal
deleted
inserted
replaced
373:af2f8ddf6a1b | 374:bd5638c21834 |
---|---|
38 | 38 |
39 void ut_InitDebug(unsigned int level, const char *filename) | 39 void ut_InitDebug(unsigned int level, const char *filename) |
40 { | 40 { |
41 FILE *fp; | 41 FILE *fp; |
42 | 42 |
43 if (!level) { | 43 if (level < 1) { |
44 DebugEnabled = 0; | 44 DebugEnabled = 0; |
45 FName = NULL; | 45 FName = NULL; |
46 return; | 46 return; |
47 } | 47 } |
48 | 48 |
60 } | 60 } |
61 } | 61 } |
62 | 62 |
63 DebugEnabled = level; | 63 DebugEnabled = level; |
64 | 64 |
65 fp = fopen(FName, "w"); | 65 fp = fopen(FName, "a"); |
66 if (!fp) return; | 66 if (!fp) return; |
67 fprintf(fp, "Debugging mode started...\n" | 67 fprintf(fp, "New trace log started.\n" |
68 "-----------------------------------\n"); | 68 "----------------------\n"); |
69 fchmod(fileno(fp), S_IRUSR|S_IWUSR); | |
69 fclose(fp); | 70 fclose(fp); |
70 } | 71 } |
71 | 72 |
72 void ut_WriteLog(const char *fmt, ...) | 73 void ut_WriteLog(unsigned int flag, const char *data) |
73 { | 74 { |
74 FILE *fp = NULL; | 75 if (!DebugEnabled || !FName) return; |
75 time_t ahora; | 76 |
76 va_list ap; | 77 if (((DebugEnabled == 2) && (flag & (LPRINT_LOG|LPRINT_DEBUG))) || |
77 char *buffer = NULL; | 78 ((DebugEnabled == 1) && (flag & LPRINT_LOG))) { |
78 | 79 FILE *fp = fopen(FName, "a+"); |
79 if (DebugEnabled && FName) { | |
80 fp = fopen(FName, "a+"); | |
81 if (!fp) return; | 80 if (!fp) return; |
82 buffer = (char *) calloc(1, 64); | 81 fputs(data, fp); |
83 | |
84 ahora = time(NULL); | |
85 strftime(buffer, 64, "[%H:%M:%S] ", localtime(&ahora)); | |
86 fprintf(fp, "%s", buffer); | |
87 | |
88 va_start(ap, fmt); | |
89 vfprintf(fp, fmt, ap); | |
90 va_end(ap); | |
91 | |
92 free(buffer); | |
93 fclose(fp); | 82 fclose(fp); |
94 } | 83 } |
95 } | 84 } |
96 | 85 |
97 // checkset_perm(name, setmode) | 86 // checkset_perm(name, setmode) |
105 | 94 |
106 fd = lstat(name, &buf); | 95 fd = lstat(name, &buf); |
107 if (fd == -1) return -1; | 96 if (fd == -1) return -1; |
108 | 97 |
109 if (buf.st_uid != geteuid()) { | 98 if (buf.st_uid != geteuid()) { |
110 scr_LogPrint("Wrong file owner [%s]", name); | 99 scr_LogPrint(LPRINT_LOGNORM, "Wrong file owner [%s]", name); |
111 return 1; | 100 return 1; |
112 } | 101 } |
113 | 102 |
114 if (buf.st_mode & (S_IRGRP | S_IWGRP | S_IXGRP) || | 103 if (buf.st_mode & (S_IRGRP | S_IWGRP | S_IXGRP) || |
115 buf.st_mode & (S_IROTH | S_IWOTH | S_IXOTH)) { | 104 buf.st_mode & (S_IROTH | S_IWOTH | S_IXOTH)) { |
116 if (setmode) { | 105 if (setmode) { |
117 mode_t newmode = 0; | 106 mode_t newmode = 0; |
118 scr_LogPrint("Bad permissions [%s]", name); | 107 scr_LogPrint(LPRINT_LOGNORM, "Bad permissions [%s]", name); |
119 if (S_ISDIR(buf.st_mode)) | 108 if (S_ISDIR(buf.st_mode)) |
120 newmode |= S_IXUSR; | 109 newmode |= S_IXUSR; |
121 newmode |= S_IRUSR | S_IWUSR; | 110 newmode |= S_IRUSR | S_IWUSR; |
122 if (chmod(name, newmode)) { | 111 if (chmod(name, newmode)) { |
123 scr_LogPrint("WARNING: Failed to correct permissions!"); | 112 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Failed to correct permissions!"); |
124 return 1; | 113 return 1; |
125 } | 114 } |
126 scr_LogPrint("Permissions have been corrected"); | 115 scr_LogPrint(LPRINT_LOGNORM, "Permissions have been corrected"); |
127 } else { | 116 } else { |
128 scr_LogPrint("WARNING: Bad permissions [%s]", name); | 117 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Bad permissions [%s]", name); |
129 return 1; | 118 return 1; |
130 } | 119 } |
131 } | 120 } |
132 | 121 |
133 return 0; | 122 return 0; |