summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-07-06 18:58:56 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-07-06 18:58:56 +0200
commit4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599 (patch)
tree67fe25649a0258596bbbe122c19fe3a09ae2a203 /include
parent6c799af1b4cf86a32979d98034c560fb976a9caf (diff)
downloadouroboros-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.in1
-rw-r--r--include/ouroboros/logs.h47
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__)