[geary] Clean up engine logging API a bit.
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Clean up engine logging API a bit.
- Date: Mon, 18 Dec 2017 03:50:16 +0000 (UTC)
commit c371b91340f27b85c8cad5008ca6351053b5e0c4
Author: Michael James Gratton <mike vee net>
Date: Mon Dec 18 13:37:25 2017 +1100
Clean up engine logging API a bit.
Also fixes debug logging under the Meson build.
* src/engine/api/geary-logging.vala (Logging): Use a domain for engine
logging calls. Make Flag.NONE explicitly set to 0 so it's obvious what
is happening in the code. Don't set up any handlers at all - this is
something the application should be doing. Rename on_log() to
default_handler() and make it public so that application can use the
engine's logger if they want.
* src/client/application/geary-application.vala (Application): Install
the engine's default handler after init'ing logging — needed to fix
logging under Meson, use stderr for logging until command-line
arguments have been processed.
* src/client/application/geary-args.vala: Stop using stderr for logging
if --debug arg was not set.
src/client/application/geary-application.vala | 5 +-
src/client/application/geary-args.vala | 11 ++-
src/engine/api/geary-logging.vala | 103 ++++++++++++++++---------
3 files changed, 79 insertions(+), 40 deletions(-)
---
diff --git a/src/client/application/geary-application.vala b/src/client/application/geary-application.vala
index 27712f9..65481f3 100644
--- a/src/client/application/geary-application.vala
+++ b/src/client/application/geary-application.vala
@@ -183,8 +183,11 @@ public class GearyApplication : Gtk.Application {
Environment.set_application_name(NAME);
Environment.set_prgname(PRGNAME);
International.init(GETTEXT_PACKAGE, bin);
-
+
Geary.Logging.init();
+ Geary.Logging.log_to(stderr);
+ GLib.Log.set_default_handler(Geary.Logging.default_handler);
+
Date.init();
// Calls Gtk.init(), amongst other things
diff --git a/src/client/application/geary-args.vala b/src/client/application/geary-args.vala
index 9c2b153..cde707e 100644
--- a/src/client/application/geary-args.vala
+++ b/src/client/application/geary-args.vala
@@ -106,10 +106,15 @@ public bool parse(string[] args) {
if (log_deserializer)
Geary.Logging.enable_flags(Geary.Logging.Flag.DESERIALIZER);
-
- if (log_debug)
+
+ if (log_debug) {
Geary.Logging.log_to(stdout);
-
+ } else {
+ // We'll be logging to stderror until this point, so stop
+ // that.
+ Geary.Logging.log_to(null);
+ }
+
return true;
}
diff --git a/src/engine/api/geary-logging.vala b/src/engine/api/geary-logging.vala
index 0ded38b..b218ccd 100644
--- a/src/engine/api/geary-logging.vala
+++ b/src/engine/api/geary-logging.vala
@@ -13,9 +13,11 @@
namespace Geary.Logging {
+private const string DOMAIN = "Geary";
+
[Flags]
public enum Flag {
- NONE,
+ NONE = 0,
NETWORK,
SERIALIZER,
REPLAY,
@@ -24,11 +26,11 @@ public enum Flag {
SQL,
FOLDER_NORMALIZATION,
DESERIALIZER;
-
+
public inline bool is_all_set(Flag flags) {
return (flags & this) == flags;
}
-
+
public inline bool is_any_set(Flag flags) {
return (flags & this) != 0;
}
@@ -48,10 +50,7 @@ private Timer? entry_timer = null;
public void init() {
if (init_count++ != 0)
return;
-
entry_timer = new Timer();
-
- log_to(null);
}
/**
@@ -92,27 +91,28 @@ public inline bool are_all_flags_set(Flag flags) {
public inline void error(Flag flags, string fmt, ...) {
if (logging_flags.is_any_set(flags))
- logv(null, LogLevelFlags.LEVEL_ERROR, fmt, va_list());
+ logv(DOMAIN, LogLevelFlags.LEVEL_ERROR, fmt, va_list());
}
public inline void critical(Flag flags, string fmt, ...) {
if (logging_flags.is_any_set(flags))
- logv(null, LogLevelFlags.LEVEL_CRITICAL, fmt, va_list());
+ logv(DOMAIN, LogLevelFlags.LEVEL_CRITICAL, fmt, va_list());
}
public inline void warning(Flag flags, string fmt, ...) {
if (logging_flags.is_any_set(flags))
- logv(null, LogLevelFlags.LEVEL_WARNING, fmt, va_list());
+ logv(DOMAIN, LogLevelFlags.LEVEL_WARNING, fmt, va_list());
}
public inline void message(Flag flags, string fmt, ...) {
if (logging_flags.is_any_set(flags))
- logv(null, LogLevelFlags.LEVEL_MESSAGE, fmt, va_list());
+ logv(DOMAIN, LogLevelFlags.LEVEL_MESSAGE, fmt, va_list());
}
public inline void debug(Flag flags, string fmt, ...) {
- if (logging_flags.is_any_set(flags))
- logv(null, LogLevelFlags.LEVEL_DEBUG, fmt, va_list());
+ if (logging_flags.is_any_set(flags)) {
+ logv(DOMAIN, LogLevelFlags.LEVEL_DEBUG, fmt, va_list());
+ }
}
/**
@@ -125,31 +125,62 @@ public inline void debug(Flag flags, string fmt, ...) {
*/
public void log_to(FileStream? stream) {
Logging.stream = stream;
-
- Log.set_handler(null, LogLevelFlags.LEVEL_DEBUG,
- (domain, levels, msg) => { on_log(" [deb]", levels, msg); });
- Log.set_handler(null, LogLevelFlags.LEVEL_INFO,
- (domain, levels, msg) => { on_log(" [inf]", levels, msg); });
- Log.set_handler(null, LogLevelFlags.LEVEL_MESSAGE,
- (domain, levels, msg) => { on_log(" [msg]", levels, msg); });
- Log.set_handler(null, LogLevelFlags.LEVEL_WARNING,
- (domain, levels, msg) => { on_log("*[wrn]", levels, msg); });
- Log.set_handler(null, LogLevelFlags.LEVEL_CRITICAL,
- (domain, levels, msg) => { on_log("![crt]", levels, msg); });
- Log.set_handler(null, LogLevelFlags.LEVEL_ERROR,
- (domain, levels, msg) => { on_log("![err]", levels, msg); });
-}
-
-private void on_log(string prefix, LogLevelFlags log_levels, string message) {
- if (stream == null)
- return;
-
- GLib.Time tm = GLib.Time.local(time_t());
- stream.printf("%s %02d:%02d:%02d %lf %s\n", prefix, tm.hour, tm.minute, tm.second,
- entry_timer.elapsed(), message);
-
- entry_timer.start();
}
+public void default_handler(string? domain,
+ LogLevelFlags log_levels,
+ string message) {
+ unowned FileStream? out = stream;
+ if (out != null ||
+ ((LogLevelFlags.LEVEL_WARNING & log_levels) > 0) ||
+ ((LogLevelFlags.LEVEL_CRITICAL & log_levels) > 0) ||
+ ((LogLevelFlags.LEVEL_ERROR & log_levels) > 0)) {
+
+ if (out == null) {
+ out = GLib.stderr;
+ }
+
+ GLib.Time tm = GLib.Time.local(time_t());
+ out.printf(
+ "%s %02d:%02d:%02d %lf %s: %s\n",
+ to_prefix(log_levels),
+ tm.hour, tm.minute, tm.second,
+ entry_timer.elapsed(),
+ domain ?? "default",
+ message
+ );
+
+ entry_timer.start();
+ }
}
+private inline string to_prefix(LogLevelFlags level) {
+ switch (level) {
+ case LogLevelFlags.LEVEL_ERROR:
+ return "![err]";
+
+ case LogLevelFlags.LEVEL_CRITICAL:
+ return "![crt]";
+
+ case LogLevelFlags.LEVEL_WARNING:
+ return "*[wrn]";
+
+ case LogLevelFlags.LEVEL_MESSAGE:
+ return " [msg]";
+
+ case LogLevelFlags.LEVEL_INFO:
+ return " [inf]";
+
+ case LogLevelFlags.LEVEL_DEBUG:
+ return " [deb]";
+
+ case LogLevelFlags.LEVEL_MASK:
+ return "![***]";
+
+ default:
+ return "![???]";
+
+ }
+}
+
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]