• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the openHiTLS project.
3  *
4  * openHiTLS is licensed under the Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *
8  *     http://license.coscl.org.cn/MulanPSL2
9  *
10  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13  * See the Mulan PSL v2 for more details.
14  */
15 
16 #include <unistd.h>
17 #include "logger.h"
18 
GetLogLevel(void)19 LogLevel GetLogLevel(void)
20 {
21 #ifdef TLS_DEBUG
22     return ENUM_LOG_LEVEL_TRACE;
23 #else
24     return ENUM_LOG_LEVEL_FATAL;
25 #endif
26 }
27 
ConvertLevel2Str(LogLevel level)28 static const char *ConvertLevel2Str(LogLevel level)
29 {
30     switch (level) {
31         case ENUM_LOG_LEVEL_TRACE:
32             return "TRACE";
33         case ENUM_LOG_LEVEL_DEBUG:
34             return "DEBUG";
35         case ENUM_LOG_LEVEL_WARNING:
36             return "WARNING";
37         case ENUM_LOG_LEVEL_ERROR:
38             return "ERROR";
39         case ENUM_LOG_LEVEL_FATAL:
40             return "FATAL";
41         default:
42             return "UNKNOWN";
43     }
44 }
45 
LogWrite(LogLevel level,const char * file,int line,const char * fmt,...)46 int LogWrite(LogLevel level, const char *file, int line, const char *fmt, ...)
47 {
48     int len, ilen;
49     LogLevel curLevel;
50     va_list vargs;
51     int tmpLevel = level;
52     char logBuf[LOG_MAX_SIZE] = {0};
53 
54     if ((tmpLevel < ENUM_LOG_LEVEL_TRACE) || (tmpLevel > ENUM_LOG_LEVEL_FATAL)) {
55         return 0;
56     }
57 
58     // Print logs whose levels are higher than or equal to the current level.
59     curLevel = GetLogLevel();
60     if (level < curLevel) {
61         return 0;
62     }
63 
64     // Process the log header
65     if (file == NULL || line == 0) {
66         len = snprintf_s(logBuf, LOG_MAX_SIZE, (size_t)(LOG_MAX_SIZE - 1), "[%d_TEST_%s]",
67             getpid(), ConvertLevel2Str((LogLevel)tmpLevel));
68     } else {
69         len = snprintf_s(logBuf, LOG_MAX_SIZE, (size_t)(LOG_MAX_SIZE - 1), "[%d_TEST_%s][%s:%d]",
70             getpid(), ConvertLevel2Str((LogLevel)tmpLevel), file, line);
71     }
72 
73     if (len < 0 || len > LOG_MAX_SIZE - 1) {
74         return 0;
75     }
76 
77     va_start(vargs, fmt);
78     ilen = vsnprintf_s(logBuf + len, (size_t)(LOG_MAX_SIZE - len), (size_t)(LOG_MAX_SIZE - len - 1), fmt, vargs);
79     if (ilen < 0 || ilen > LOG_MAX_SIZE - len - 1) {
80         // In the case of overflow truncation, the maximum value is used
81         len = LOG_MAX_SIZE;
82         logBuf[len - 1] = '\0';
83         goto EXIT;
84     }
85 
86     len += ilen;
87     logBuf[len] = '\n';
88     logBuf[len + 1] = '\0';
89 EXIT:
90     va_end(vargs);
91 #ifdef TLS_DEBUG
92     printf("%s", logBuf);
93 #endif
94     return 0;
95 }
96