]> git.meshlink.io Git - meshlink/commitdiff
Add __FILE__ and __LINE__ information to log messages. feature/logger-file-line
authorGuus Sliepen <guus@meshlink.io>
Sun, 2 May 2021 12:23:41 +0000 (14:23 +0200)
committerGuus Sliepen <guus@meshlink.io>
Thu, 6 May 2021 20:52:35 +0000 (22:52 +0200)
src/logger.c
src/logger.h

index 78d629ee2e5305a57e812522e7bb79c04f5ed1d2..59d027ef87e74e5e54aba2d114907584ca440057 100644 (file)
@@ -23,8 +23,8 @@
 #include "meshlink_internal.h"
 #include "sptps.h"
 
-// TODO: refactor logging code to use a meshlink_handle_t *.
-void logger(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *format, ...) {
+#ifndef MESHLINK_NO_LOG
+void logger2(const char *file, int line, meshlink_handle_t *mesh, meshlink_log_level_t level, const char *format, ...) {
        assert(format);
 
        if(mesh) {
@@ -40,12 +40,18 @@ void logger(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *for
        va_list ap;
        char message[1024] = "";
 
+       int hlen = snprintf(message, sizeof message, "%s:%d ", file, line);
+
        va_start(ap, format);
-       int len = vsnprintf(message, sizeof(message), format, ap);
+       int len = vsnprintf(message + hlen, sizeof(message) - hlen, format, ap);
        va_end(ap);
 
-       if(len > 0 && (size_t)len < sizeof(message) && message[len - 1] == '\n') {
-               message[len - 1] = 0;
+       if(len > 0) {
+               len += hlen;
+
+               if((size_t)len < sizeof(message) && message[len - 1] == '\n') {
+                       message[len - 1] = 0;
+               }
        }
 
        if(mesh) {
@@ -54,3 +60,4 @@ void logger(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *for
                global_log_cb(NULL, level, message);
        }
 }
+#endif
index b9269f047b84ad2b943fdd2ed9a4d94aea9921df..787a6ec8daeefe19d09732f8e7ddd6fd143d4d02 100644 (file)
 
 #include "meshlink_internal.h"
 
-void logger(meshlink_handle_t *mesh, meshlink_log_level_t level, const char *format, ...) __attribute__((__format__(printf, 3, 4)));
+#ifdef MESHLINK_NO_LOG
+#define logger(mesh, level, ...) do {(void)(mesh);} while(0)
+#else
+#define logger(mesh, level, ...) logger2(__FILE__, __LINE__, (mesh), (level), __VA_ARGS__)
+void logger2(const char *file, int line, meshlink_handle_t *mesh, meshlink_log_level_t level, const char *format, ...) __attribute__((__format__(printf, 5, 6)));
+#endif
 
 #endif