106 lines
3.3 KiB
JavaScript
106 lines
3.3 KiB
JavaScript
// 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);
|
|
}
|
|
}
|