[FarGroup/FarManager] master: Logging improvements (2f8fe4db5)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Apr 6, 2026, 7:16:26 PM (10 days ago) Apr 6
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/2f8fe4db5a8e421873a3a8411aba33028e5575ab

>---------------------------------------------------------------

commit 2f8fe4db5a8e421873a3a8411aba33028e5575ab
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Tue Apr 7 00:05:35 2026 +0100

Logging improvements


>---------------------------------------------------------------

2f8fe4db5a8e421873a3a8411aba33028e5575ab
far/changelog | 5 +++++
far/log.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
far/vbuild.m4 | 2 +-
3 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/far/changelog b/far/changelog
index 1577242bc..320d79245 100644
--- a/far/changelog
+++ b/far/changelog
@@ -1,3 +1,8 @@
+--------------------------------------------------------------------------------
+drkns 2026-04-07 00:05:18+01:00 - build 6674
+
+1. Logging improvements.
+
--------------------------------------------------------------------------------
drkns 2026-04-06 19:36:40+01:00 - build 6673

diff --git a/far/log.cpp b/far/log.cpp
index 58e3a307f..da45fe0a3 100644
--- a/far/log.cpp
+++ b/far/log.cpp
@@ -165,6 +165,28 @@ namespace
return Colors[std::to_underlying(Level) / logging::detail::step];
}

+ auto run_mode_to_string()
+ {
+ switch (get_run_mode())
+ {
+#define STRMODE(x) case run_mode::x: return WIDE_SV_LITERAL(x)
+ STRMODE(unknown);
+ STRMODE(interactive);
+ STRMODE(elevation);
+ STRMODE(config_import);
+ STRMODE(config_export);
+ STRMODE(clear_cache);
+ STRMODE(logger);
+ STRMODE(help);
+#ifdef ENABLE_TESTS
+ STRMODE(tests);
+#endif
+#undef STRMODE
+ default:
+ std::unreachable();
+ }
+ }
+
auto get_thread_id()
{
if (const auto ThreadName = os::debug::get_thread_name(GetCurrentThread()); !ThreadName.empty())
@@ -279,7 +301,7 @@ namespace

~sink_console()
{
- if (get_run_mode() != run_mode::interactive)
+ if (m_UsingDefaultBuffer)
{
// Borrowed handle, can't close it
m_Buffer.release();
@@ -396,10 +418,11 @@ namespace
private:
void initialize_ui()
{
- if (get_run_mode() != run_mode::interactive)
+ if (using_default_buffer())
{
// No UI, we can use stdout
m_Buffer.reset(console.GetOutputHandle());
+ m_UsingDefaultBuffer = true;
return;
}

@@ -414,7 +437,23 @@ namespace
SetConsoleScreenBufferSize(m_Buffer.native_handle(), { Width, 9999 });
}

+ static bool using_default_buffer()
+ {
+ switch (get_run_mode())
+ {
+ case run_mode::interactive:
+ return false;
+
+ case run_mode::elevation:
+ return true;
+
+ default:
+ throw far_known_exception(far::format(L"{} sink is not supported in this mode"sv, name));
+ }
+ }
+
os::handle m_Buffer;
+ bool m_UsingDefaultBuffer{};
};

class sink_stdout: public no_config
@@ -740,6 +779,10 @@ namespace
else
LOGWARNING(L"Unknown sink {}"sv, i);
}
+ catch (far_known_exception const& e)
+ {
+ LOGWARNING(L"{}"sv, e.message());
+ }
catch (std::exception const& e)
{
LOGERROR(L"{}"sv, e);
@@ -960,7 +1003,14 @@ namespace logging
// The old one must be closed before creating a new one
m_Sink.reset();

- m_Sink = create_sink(SinkName, SinkMode);
+ try
+ {
+ m_Sink = create_sink(SinkName, SinkMode);
+ }
+ catch (std::exception const&)
+ {
+ // In space no one can hear your scream
+ }

if (!m_Sink)
m_Level = level::off;
@@ -990,6 +1040,7 @@ namespace logging

LOGINFO(L"{}"sv, build::version_string());
LOGINFO(L"{}"sv, os::version::os_version());
+ LOGINFO(L"Run mode: {}"sv, run_mode_to_string());

configure_env();
}
diff --git a/far/vbuild.m4 b/far/vbuild.m4
index e688b30af..368f6481e 100644
--- a/far/vbuild.m4
+++ b/far/vbuild.m4
@@ -1 +1 @@
-6673
+6674


Reply all
Reply to author
Forward
0 new messages