#include <windows.h>
#include <stdio.h>
void xlog_console_open()
{
FreeConsole();
AllocConsole();
AttachConsole(GetCurrentProcessId());
freopen("CON", "w", stdout);
freopen("CON", "w", stderr);
freopen("CON", "r", stdin);
}
#ifndef xlog_hpp
#define xlog_hpp
#define xlog_level xlog_level_info
#include <QDebug>
#include <QDateTime>
void xlog_console_open();
#define xlog_level_nano 0
#define xlog_level_error 1
#define xlog_level_warn 2
#define xlog_level_info 3
#define xlog_level_debug 4
#define xlog(level, level_name, format, ...) \
do \
{ \
if (level > xlog_level) \
break; \
\
QString file_name(__FILE__); \
qDebug("%s: " format, \
QString("%1 %2 %3 L%4").arg(QDateTime::currentDateTime().toString("yyyy/M/d hh:mm:ss:zzz")).arg(file_name.mid(file_name.lastIndexOf("\\") + 1)).arg(level_name).arg(__LINE__).toLatin1().data(), \
##__VA_ARGS__); \
} while (0)
#define xlog_error(format, ...) xlog(xlog_level_error, "[error]", format, ##__VA_ARGS__)
#define xlog_warn(format, ...) xlog(xlog_level_warn, "[warn]", format, ##__VA_ARGS__)
#define xlog_info(format, ...) xlog(xlog_level_info, "[info]", format, ##__VA_ARGS__)
#define xlog_debug(format, ...) xlog(xlog_level_debug, "[debug]", format, ##__VA_ARGS__)
#endif
xlog_debug("%s", QString("data %1: 0x%2").arg(i).arg(QString::number(data[i], 16)).toLatin1().data());