summaryrefslogtreecommitdiff
path: root/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js')
-rw-r--r--raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js b/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js
new file mode 100644
index 0000000..3c60400
--- /dev/null
+++ b/raveos-theme/gnome/theme-data/extensions/installed/appindicatorsupport@rgcjonas.gmail.com/logger.js
@@ -0,0 +1,105 @@
+// This file is part of the AppIndicator/KStatusNotifierItem GNOME Shell extension
+//
+// 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 Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import GLib from 'gi://GLib';
+
+/**
+ * Helper class for logging stuff
+ */
+export class Logger {
+ static _logStructured(logLevel, message, extraFields = {}) {
+ if (!Object.values(GLib.LogLevelFlags).includes(logLevel)) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_WARNING,
+ 'logLevel is not a valid GLib.LogLevelFlags');
+ return;
+ }
+
+ if (!Logger._levels.includes(logLevel))
+ return;
+
+ let fields = {
+ 'SYSLOG_IDENTIFIER': Logger._uuid,
+ 'MESSAGE': `${message}`,
+ };
+
+ let thisFile = null;
+ const {stack} = new Error();
+ for (let stackLine of stack.split('\n')) {
+ stackLine = stackLine.replace('resource:///org/gnome/Shell/', '');
+ const [code, line] = stackLine.split(':');
+ const [func, file] = code.split(/@(.+)/);
+
+ if (!thisFile || thisFile === file) {
+ thisFile = file;
+ continue;
+ }
+
+ fields = Object.assign(fields, {
+ 'CODE_FILE': file || '',
+ 'CODE_LINE': line || '',
+ 'CODE_FUNC': func || '',
+ });
+
+ break;
+ }
+
+ GLib.log_structured(Logger._domain, logLevel, Object.assign(fields, extraFields));
+ }
+
+ static init(extension) {
+ if (Logger._domain)
+ return;
+
+ const allLevels = Object.values(GLib.LogLevelFlags);
+ const domains = GLib.getenv('G_MESSAGES_DEBUG');
+ const {name: domain} = extension.metadata;
+ Logger._uuid = extension.metadata.uuid;
+ Logger._domain = domain.replaceAll(' ', '-');
+
+ if (domains === 'all' || (domains && domains.split(' ').includes(Logger._domain))) {
+ Logger._levels = allLevels;
+ } else {
+ Logger._levels = allLevels.filter(
+ l => l <= GLib.LogLevelFlags.LEVEL_WARNING);
+ }
+ }
+
+ static destroy() {
+ delete Logger._domain;
+ delete Logger._uuid;
+ delete Logger._levels;
+ }
+
+ static debug(message) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_DEBUG, message);
+ }
+
+ static message(message) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_MESSAGE, message);
+ }
+
+ static warn(message) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_WARNING, message);
+ }
+
+ static error(message) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_ERROR, message);
+ }
+
+ static critical(message) {
+ Logger._logStructured(GLib.LogLevelFlags.LEVEL_CRITICAL, message);
+ }
+}