diff options
| author | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2024-05-07 19:26:10 +0300 |
|---|---|---|
| committer | Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> | 2024-05-07 09:27:50 +0300 |
| commit | 23941735df4d535e88a9a1d22bdf6c0c1fdf9cca (patch) | |
| tree | 90328dc90e1ce31abdc56c8c104a0ddff1b4b97d | |
| parent | b36e492d29eed332d074a221317849b5e78abbd7 (diff) | |
logging: rework a bit, maybe support syslog
Seems journal logging fails on NetBSD (no surprise), but has some
unwanted/not-fully-understood side-effects.
In any case, outside Linux there's no use in even trying to use
journald; so we don't do that anymore.
Add conditional support for syslog (requires glib 2.80).
| -rw-r--r-- | lib/utils/mu-logger.cc | 39 | ||||
| -rw-r--r-- | lib/utils/tests/meson.build | 2 | ||||
| -rw-r--r-- | meson.build | 19 |
3 files changed, 48 insertions, 12 deletions
diff --git a/lib/utils/mu-logger.cc b/lib/utils/mu-logger.cc index c9f516d..c9a0d74 100644 --- a/lib/utils/mu-logger.cc +++ b/lib/utils/mu-logger.cc @@ -1,5 +1,5 @@ /* -** Copyright (C) 2020-2022 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> +** Copyright (C) 2020-2024 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl> ** ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the @@ -17,6 +17,9 @@ ** */ +#include "config.h" +#include "mu-logger.hh" + #define G_LOG_USE_STRUCTURED #include <glib.h> #include <glib/gstdio.h> @@ -31,8 +34,6 @@ #include <thread> #include <mutex> -#include "mu-logger.hh" - using namespace Mu; static bool MuLogInitialized = false; @@ -118,10 +119,29 @@ log_stdouterr(GLogLevelFlags level, const GLogField* fields, gsize n_fields, gpo return g_log_writer_standard_streams(level, fields, n_fields, user_data); } + + +// log to some logging system; the one that is available & works of journal, +// syslog, file. static GLogWriterOutput -log_journal(GLogLevelFlags level, const GLogField* fields, gsize n_fields, gpointer user_data) +log_system(GLogLevelFlags level, const GLogField* fields, gsize n_fields, gpointer user_data) { - return g_log_writer_journald(level, fields, n_fields, user_data); + GLogWriterOutput res = G_LOG_WRITER_UNHANDLED; + +#ifdef MAYBE_USE_JOURNAL + res = g_log_writer_journald(level, fields, n_fields, user_data); + if (res == G_LOG_WRITER_HANDLED) + return res; +#endif /*MAYBE_USE_JOURNAL*/ + +#ifdef MAYBE_USE_SYSLOG + /* since glib 2.80 */ + res = g_log_writer_syslog(level, fields, n_fields, user_data); + if (res == G_LOG_WRITER_HANDLED) + return res; +#endif /*MAYBE_USE_SYSLOG*/ + + return res = log_file(level, fields, n_fields, user_data); } @@ -156,11 +176,10 @@ Mu::Logger::Logger(const std::string& path, Mu::Logger::Options opts) } // log to the journal, or, if not available to a file. - if (any_of(MuLogOptions & Options::File) || - log_journal(level, fields, n_fields, user_data) != G_LOG_WRITER_HANDLED) - return log_file(level, fields, n_fields, user_data); - else - return G_LOG_WRITER_HANDLED; + if (any_of(MuLogOptions & Options::File)) + return log_file(level, fields, n_fields, user_data); + + return log_system(level, fields, n_fields, user_data); }, NULL, NULL); diff --git a/lib/utils/tests/meson.build b/lib/utils/tests/meson.build index 9c2883b..6fa3d17 100644 --- a/lib/utils/tests/meson.build +++ b/lib/utils/tests/meson.build @@ -50,7 +50,7 @@ test('test-logger', executable('test-logger', '../mu-logger.cc', install: false, cpp_args: ['-DBUILD_TESTS'], - dependencies: [glib_dep, lib_mu_utils_dep, thread_dep ])) + dependencies: [glib_dep, lib_mu_utils_dep,config_h_dep,thread_dep ])) test('test-option', executable('test-option', '../mu-option.cc', diff --git a/meson.build b/meson.build index 718d68f..265c4a8 100644 --- a/meson.build +++ b/meson.build @@ -203,6 +203,23 @@ if xapver.version_compare('>= 1.4.23') config_h_data.set('HAVE_XAPIAN_FLAG_NGRAMS', 1) endif +host_system = host_machine.system() +# +# soft dependencies +# + + +# logging + +# if we're on a linux machine, perhaps there's systemd/journald. +# otherwise, we don't bother. +if host_machine.system() == 'linux' + config_h_data.set('MAYBE_USE_JOURNAL', 1) +endif +if cc.has_function('g_log_writer_syslog',dependencies: glib_dep) + config_h_data.set('MAYBE_USE_SYSLOG', 1) +endif + # optionally, use Compact Language Detector2 if we can find it. cld2_dep = meson.get_compiler('cpp').find_library('cld2', required: get_option('cld2')) if not get_option('cld2').disabled() and cld2_dep.found() @@ -211,7 +228,7 @@ else message('CLD2 not found or disabled; no support for language detection') endif -# soft dependencies +# guile guile_dep = dependency('guile-3.0', required: get_option('guile')) # allow for a custom guile-extension-dir if guile_dep.found() |
