diff options
author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-07-06 18:58:56 +0200 |
---|---|---|
committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-07-06 18:58:56 +0200 |
commit | 4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599 (patch) | |
tree | 67fe25649a0258596bbbe122c19fe3a09ae2a203 /include | |
parent | 6c799af1b4cf86a32979d98034c560fb976a9caf (diff) | |
download | ouroboros-4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599.tar.gz ouroboros-4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599.zip |
lib, irmd, ipcpd: Provide the feature to write to logs
Writing output to log files is now enabled by default. Logs are
written to <INSTALL_PREFIX>/var/log/ouroboros, which is created on
install. There is a log file for the irmd and one per IPCP. To still
get (colored) output on stdout, provide the --stdout switch when
starting the irmd.
Fixes #17
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/config.h.in | 1 | ||||
-rw-r--r-- | include/ouroboros/logs.h | 47 |
2 files changed, 34 insertions, 14 deletions
diff --git a/include/ouroboros/config.h.in b/include/ouroboros/config.h.in index 4cbed554..c11c2d05 100644 --- a/include/ouroboros/config.h.in +++ b/include/ouroboros/config.h.in @@ -44,5 +44,6 @@ #define IRMD_MAX_FLOWS 4096 #define IRMD_THREADPOOL_SIZE 3 #define IRMD_FLOW_TIMEOUT 5000 /* ms */ +#define LOG_DIR "/@LOG_DIR@/" #endif diff --git a/include/ouroboros/logs.h b/include/ouroboros/logs.h index 344a7ddc..601d8340 100644 --- a/include/ouroboros/logs.h +++ b/include/ouroboros/logs.h @@ -30,32 +30,51 @@ #error You must define OUROBOROS_PREFIX before including this file #endif +int set_logfile(char * filename); + #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YELLOW "\x1b[33m" #define ANSI_COLOR_BLUE "\x1b[34m" #define ANSI_COLOR_RESET "\x1b[0m" -#define __LOG(CLR, PFX, LVL, FMT, ARGS...) \ - do { printf(CLR PFX "(" LVL "): " FMT ANSI_COLOR_RESET "\n", ##ARGS); }\ - while (0) +#define DEBUG_CODE "DB" +#define ERROR_CODE "EE" +#define WARN_CODE "WW" +#define INFO_CODE "II" +#define IMPL_CODE "NI" + +extern FILE * logfile; + +#define __LOG(CLR, LVL, FMT, ARGS...) \ + do { \ + if (logfile != NULL) { \ + fprintf(logfile, \ + OUROBOROS_PREFIX "(" LVL "): " \ + FMT ANSI_COLOR_RESET "\n", ##ARGS); \ + fflush(logfile); \ + } else { \ + printf(CLR OUROBOROS_PREFIX "(" LVL "): " \ + FMT ANSI_COLOR_RESET "\n", ##ARGS); \ + } \ + } while (0) -#define LOG_ERR(FMT, ARGS...) __LOG(ANSI_COLOR_RED, OUROBOROS_PREFIX, \ - "EE", FMT, ##ARGS) -#define LOG_WARN(FMT, ARGS...) __LOG(ANSI_COLOR_YELLOW, OUROBOROS_PREFIX, \ - "WW", FMT, ##ARGS) -#define LOG_INFO(FMT, ARGS...) __LOG(ANSI_COLOR_GREEN, OUROBOROS_PREFIX, \ - "II", FMT, ##ARGS) -#define LOG_NI(FMT, ARGS...) __LOG(ANSI_COLOR_BLUE, OUROBOROS_PREFIX, \ - "NI", FMT, ##ARGS) +#define LOG_ERR(FMT, ARGS...) __LOG(ANSI_COLOR_RED, \ + ERROR_CODE, FMT, ##ARGS) +#define LOG_WARN(FMT, ARGS...) __LOG(ANSI_COLOR_YELLOW, \ + WARN_CODE, FMT, ##ARGS) +#define LOG_INFO(FMT, ARGS...) __LOG(ANSI_COLOR_GREEN, \ + INFO_CODE, FMT, ##ARGS) +#define LOG_NI(FMT, ARGS...) __LOG(ANSI_COLOR_BLUE, \ + IMPL_CODE, FMT, ##ARGS) #ifdef CONFIG_OUROBOROS_DEBUG -#define LOG_DBG(FMT, ARGS...) __LOG("", OUROBOROS_PREFIX, "DB", FMT, ##ARGS) +#define LOG_DBG(FMT, ARGS...) __LOG("", DEBUG_CODE, FMT, ##ARGS) #else -#define LOG_DBG(FMT, ARGS...) do { } while (0) +#define LOG_DBG(FMT, ARGS...) do { } while (0) #endif -#define LOG_DBGF(FMT, ARGS...) LOG_DBG("%s: " FMT, __FUNCTION__, ##ARGS) +#define LOG_DBGF(FMT, ARGS...) LOG_DBG("%s: " FMT, __FUNCTION__, ##ARGS) #define LOG_MISSING LOG_NI("Missing code in %s:%d",__FILE__, __LINE__) |