diff options
author | Alexander Mohr <alexander.m.mohr@mercedes-benz.com> | 2022-10-05 10:32:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-05 10:32:15 +0200 |
commit | 5b80a4c92c9aa9ef45ce1da599b401ba631a86ed (patch) | |
tree | a8fa737aa20b222808a643516857cd9c5e2d23ac /src/daemon | |
parent | 34471d85fca14a5ec359d2d06a8d7018cb23beb2 (diff) | |
download | DLT-daemon-5b80a4c92c9aa9ef45ce1da599b401ba631a86ed.tar.gz |
internal-logging: Fix issues with file logging (#378)
This commit fixes the following issues if access
to the internal log file is not possible (logging_mode = DLT_LOG_TO_FILE)
* dlt_log_free tried to call fclose on a nullptr
Added a nullcheck for this
* Access to log file might be denied but access to logs is still wanted
Add a new CMake option WITH_DLT_FILE_LOGGING_SYSLOG_FALLBACK
If this is set to ON and the logging moe is set to file,
the dlt-daemon will fall back to syslog if opening the internal log
file failed
Signed-off-by: Alexander Mohr <alexander.m.mohr@mercedes-benz.com>
Diffstat (limited to 'src/daemon')
-rw-r--r-- | src/daemon/dlt-daemon.c | 22 | ||||
-rw-r--r-- | src/daemon/dlt.conf | 2 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index 35fb024..2c9ff6a 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -940,7 +940,25 @@ int main(int argc, char *argv[]) /* Initialize internal logging facility */ dlt_log_set_filename(daemon_local.flags.loggingFilename); dlt_log_set_level(daemon_local.flags.loggingLevel); - dlt_log_init(daemon_local.flags.loggingMode); + DltReturnValue log_init_result = + dlt_log_init(daemon_local.flags.loggingMode); + + if (log_init_result != DLT_RETURN_OK) { + fprintf(stderr, "Failed to init internal logging\n"); + +#if WITH_DLT_FILE_LOGGING_SYSLOG_FALLBACK + if (daemon_local.flags.loggingMode == DLT_LOG_TO_FILE) { + fprintf(stderr, "Falling back to syslog mode\n"); + + daemon_local.flags.loggingMode = DLT_LOG_TO_SYSLOG; + log_init_result = dlt_log_init(daemon_local.flags.loggingMode); + if (log_init_result != DLT_RETURN_OK) { + fprintf(stderr, "Failed to setup syslog logging, internal logs will " + "not be available\n"); + } + } +#endif + } /* Print version information */ dlt_get_version(version, DLT_DAEMON_TEXTBUFSIZE); @@ -955,7 +973,7 @@ int main(int argc, char *argv[]) if (dlt_mkdir_recursive(dltFifoBaseDir) != 0) { dlt_vlog(LOG_ERR, "Base dir %s cannot be created!\n", dltFifoBaseDir); return -1; - } + } #else if (dlt_mkdir_recursive(DLT_USER_IPC_PATH) != 0) { diff --git a/src/daemon/dlt.conf b/src/daemon/dlt.conf index 7e19817..777aa82 100644 --- a/src/daemon/dlt.conf +++ b/src/daemon/dlt.conf @@ -46,6 +46,8 @@ LoggingMode = 0 LoggingLevel = 6 # The logging filename if internal logging mode is log to file (Default: /tmp/dlt.log) +# If access to the file is not possible, the daemon will fall back to syslog +# if WITH_DLT_FILE_LOGGING_SYSLOG_FALLBACK is set as compile flag LoggingFilename = /tmp/dlt.log # Timeout on send to client (sec) |