libPeConv
A library to load, manipulate, dump PE files.
Loading...
Searching...
No Matches
logger.h
Go to the documentation of this file.
1
25#pragma once
26#include <stdio.h>
27
28// Verbosity levels
29#define LOG_LEVEL_NONE 0 // silent
30#define LOG_LEVEL_ERROR 1 // something broke
31#define LOG_LEVEL_WARNING 2 // something looks wrong
32#define LOG_LEVEL_INFO 3 // notable operational events
33#define LOG_LEVEL_DEBUG 4 // detailed tracing, noisy
34
35#ifndef LOG_VERBOSITY
36# define LOG_VERBOSITY LOG_LEVEL_ERROR
37#endif
38
39// Output sink selection
40#ifdef LOG_USE_DEBUGOUT
41# include <windows.h>
42# include <stdio.h>
43 // Format into a local buffer, then hand off to OutputDebugStringA
44# define _LOG(tag, fmt, ...) \
45 do { \
46 char _log_buf[512]; \
47 snprintf(_log_buf, sizeof(_log_buf), \
48 "[" tag "] %s:%d: " fmt "\n", \
49 __FILE__, __LINE__, ##__VA_ARGS__); \
50 OutputDebugStringA(_log_buf); \
51 } while(0)
52#else
53# define _LOG(tag, fmt, ...) \
54 fprintf(stderr, "[" tag "] %s:%d: " fmt "\n", \
55 __FILE__, __LINE__, ##__VA_ARGS__)
56#endif
57
58// Public macros
59#if LOG_VERBOSITY >= LOG_LEVEL_ERROR
60# define LOG_ERROR(fmt, ...) _LOG("ERROR", fmt, ##__VA_ARGS__)
61#else
62# define LOG_ERROR(fmt, ...) do {} while(0)
63#endif
64
65#if LOG_VERBOSITY >= LOG_LEVEL_WARNING
66# define LOG_WARNING(fmt, ...) _LOG("WARNING", fmt, ##__VA_ARGS__)
67#else
68# define LOG_WARNING(fmt, ...) do {} while(0)
69#endif
70
71#if LOG_VERBOSITY >= LOG_LEVEL_INFO
72# define LOG_INFO(fmt, ...) _LOG("INFO", fmt, ##__VA_ARGS__)
73#else
74# define LOG_INFO(fmt, ...) do {} while(0)
75#endif
76
77#if LOG_VERBOSITY >= LOG_LEVEL_DEBUG
78# define LOG_DEBUG(fmt, ...) _LOG("DEBUG", fmt, ##__VA_ARGS__)
79#else
80# define LOG_DEBUG(fmt, ...) do {} while(0)
81#endif