[PATCH v3 05/14] config: Look up log file in configuration file
Milan Zamazal
mzamazal at redhat.com
Thu Jun 27 16:51:42 CEST 2024
This requires change in LIBCAMERA_LOG_FILE interpretation so that we can
disable the log file in isolated processes. If LIBCAMERA_LOG_FILE is
defined but empty, it means there is no log file, even if defined in the
configuration file. This should cause no compatibility trouble since
opening a file with an empty name makes little sense.
The configuration snippet:
configuration:
log:
file: FILENAME
Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
---
src/libcamera/base/global_configuration.cpp | 1 +
src/libcamera/base/log.cpp | 13 +++++++++----
src/libcamera/process.cpp | 11 ++++++++---
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/src/libcamera/base/global_configuration.cpp b/src/libcamera/base/global_configuration.cpp
index b202cef9..b64bf28e 100644
--- a/src/libcamera/base/global_configuration.cpp
+++ b/src/libcamera/base/global_configuration.cpp
@@ -34,6 +34,7 @@ LOG_DEFINE_CATEGORY(Configuration)
* \code{.yaml}
* configuration:
* log:
+ * file: syslog
* levels: 'IPAManager:DEBUG'
* \endcode
*
diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index 891b4ae9..07352f6c 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -607,16 +607,21 @@ Logger::Logger()
*/
void Logger::parseLogFile()
{
- const char *file = utils::secure_getenv("LIBCAMERA_LOG_FILE");
- if (!file)
+ std::optional<std::string> file =
+ GlobalConfiguration::envOption("LIBCAMERA_LOG_FILE", "log.file");
+ if (!file.has_value())
return;
- if (!strcmp(file, "syslog")) {
+ auto fileValue = file.value();
+ if (fileValue == "")
+ return;
+
+ if (fileValue == "syslog") {
logSetTarget(LoggingTargetSyslog);
return;
}
- logSetFile(file, false);
+ logSetFile(fileValue.c_str(), false);
}
/**
diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
index 86d27b2d..42f54e85 100644
--- a/src/libcamera/process.cpp
+++ b/src/libcamera/process.cpp
@@ -12,7 +12,9 @@
#include <fcntl.h>
#include <iostream>
#include <list>
+#include <optional>
#include <signal.h>
+#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
@@ -24,6 +26,8 @@
#include <libcamera/base/log.h>
#include <libcamera/base/utils.h>
+#include "libcamera/internal/global_configuration.h"
+
/**
* \file process.h
* \brief Process object
@@ -263,9 +267,10 @@ int Process::start(const std::string &path,
closeAllFdsExcept(fds);
- const char *file = utils::secure_getenv("LIBCAMERA_LOG_FILE");
- if (file && strcmp(file, "syslog"))
- unsetenv("LIBCAMERA_LOG_FILE");
+ std::optional<std::string> file =
+ GlobalConfiguration::envOption("LIBCAMERA_LOG_FILE", "log.file");
+ if (file.has_value() && file.value() != "syslog")
+ setenv("LIBCAMERA_LOG_FILE", "", 1);
const char **argv = new const char *[args.size() + 2];
unsigned int len = args.size();
--
2.44.1
More information about the libcamera-devel
mailing list