diff options
-rw-r--r-- | include/osmocom/core/logging.h | 1 | ||||
-rw-r--r-- | src/logging.c | 14 |
2 files changed, 15 insertions, 0 deletions
diff --git a/include/osmocom/core/logging.h b/include/osmocom/core/logging.h index 1e79dab3..617d78e4 100644 --- a/include/osmocom/core/logging.h +++ b/include/osmocom/core/logging.h @@ -224,6 +224,7 @@ enum log_target_type { enum log_filename_type { LOG_FILENAME_NONE, LOG_FILENAME_PATH, + LOG_FILENAME_BASENAME, }; /*! structure representing a logging target */ diff --git a/src/logging.c b/src/logging.c index 8cb34071..66074ea0 100644 --- a/src/logging.c +++ b/src/logging.c @@ -323,6 +323,14 @@ const char* log_category_name(int subsys) return NULL; } +static const char *const_basename(const char *path) +{ + const char *bn = strrchr(path, '/'); + if (!bn || !bn[1]) + return path; + return bn + 1; +} + static void _output(struct log_target *target, unsigned int subsys, unsigned int level, const char *file, int line, int cont, const char *format, va_list ap) @@ -400,6 +408,12 @@ static void _output(struct log_target *target, unsigned int subsys, goto err; OSMO_SNPRINTF_RET(ret, rem, offset, len); break; + case LOG_FILENAME_BASENAME: + ret = snprintf(buf + offset, rem, "%s:%d ", const_basename(file), line); + if (ret < 0) + goto err; + OSMO_SNPRINTF_RET(ret, rem, offset, len); + break; } } ret = vsnprintf(buf + offset, rem, format, ap); |