📄 log.cpp
字号:
#include "stdafx.h"
#include "Log.h"
#include "stdio.h"
#include "windows.h"
char *log_level_string[5] = {"FINE", "DEBUG", "INFO", "WARNING", "ERROR"};
#define CURRENT_LEVEL LOG_LEVEL_FINE
#define LOG_ENABLE 1
extern int vuser_id;
extern Logger *mplog;
Logger::Logger()
{
sprintf(log_file, "%s\\%s\\mmsdido.log", ROOT_DIR, LOG_DIR);
fp = NULL;
}
int Logger::init()
{
if (!LOG_ENABLE) return 0;
fp = fopen(log_file, "wb");
if (fp == NULL)
{
printf("\nFailed to create log file:%s.", log_file);
}
fseek(fp, 0, SEEK_END);
return 0;
}
void Logger::writeBIN(LOG_LEVEL level, char *file_name, int line_number, char *str, char *buf, int length)
{
struct tm tmNow;
time_t timeNow;
int len;
if (!LOG_ENABLE) return;
// filter unnecessary log info according to the specified log level
if (level < CURRENT_LEVEL) return;
len = 0;
time(&timeNow);
tmNow = *localtime(&timeNow); // copy the current date-time.
len += _snprintf(log_buf+len, MAX_SIZE_LOGITEM - len,
"\n[%d][%s][%2.2d:%2.2d:%2.2d][%s:%d]: %s", (int) GetCurrentThreadId(), log_level_string[level],
tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec,
file_name, line_number, str);
fprintf(stdout, log_buf);
if (fp)
{
fprintf(fp, log_buf);
}
int i, j, k;
int sbuf[16];
j = 0;
fprintf(stdout, "\r\n");
fprintf(fp, "\r\n");
for (i = 0; i < length; i++)
{
unsigned char c = buf[i];
if (i%2 == 0)
{
fprintf(stdout, " ");
fprintf(fp, " ");
}
if (c <= 0x0f) {
fprintf(stdout, "0%x", c);
fprintf(fp, "0%x", c);
}
else {
fprintf(stdout, "%x", c);
fprintf(fp, "%x", c);
}
sbuf[j] = c;
j++;
if (j == 16)
{
fprintf(stdout, " ");
fprintf(fp, " ");
for (k = 0; k < j; k++)
{
char ch = sbuf[k];
if ( !(ch >= 33 && ch <= 126))
ch = '.';
fprintf(stdout, "%c", ch);
fprintf(fp, "%c", ch);
}
fprintf(stdout, "\r\n");
fprintf(fp, "\r\n");
j = 0;
}
}
for (i = 0; i < 16 - j; i++)
{
fprintf(stdout, " ");
fprintf(fp, " ");
if (i%2 == 0)
{
fprintf(stdout, " ");
fprintf(fp, " ");
}
}
fprintf(stdout, " ");
fprintf(fp, " ");
for (k = 0; k < j; k++)
{
char c = sbuf[k];
if ( !(c >= 33 && c <= 126))
c = '.';
fprintf(stdout, "%c", c);
fprintf(fp, "%c", c);
}
fflush(fp);
}
void Logger::write(LOG_LEVEL level, char *file_name, int line_number, const char *format, ...)
{
va_list ap;
struct tm tmNow;
time_t timeNow;
int len;
if (!LOG_ENABLE) return;
// filter unnecessary log info according to the specified log level
if (level < CURRENT_LEVEL) return;
len = 0;
time(&timeNow);
tmNow = *localtime(&timeNow); // copy the current date-time.
len += _snprintf(log_buf+len, MAX_SIZE_LOGITEM - len,
"\n[%d][%s][%2.2d:%2.2d:%2.2d][%s:%d]: ", (int) GetCurrentThreadId(), log_level_string[level],
tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec,
file_name, line_number);
// parse args.
va_start(ap, format);
len += _vsnprintf(log_buf+len, MAX_SIZE_LOGITEM - len, format, ap);
va_end(ap);
fprintf(stdout, log_buf);
if (fp)
{
fprintf(fp, log_buf);
fflush(fp);
}
}
int Logger::close()
{
if (!LOG_ENABLE) return 0;
if (fp) fclose(fp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -