core/log: add fancy logger

This commit is contained in:
outfoxxed 2024-08-02 18:48:09 -07:00
parent 533b389742
commit 46f48f2f87
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
4 changed files with 85 additions and 4 deletions

View file

@ -37,6 +37,7 @@ qt_add_library(quickshell-core STATIC
types.cpp
qsmenuanchor.cpp
clock.cpp
logging.cpp
)
set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS GIT_REVISION="${GIT_REVISION}")

74
src/core/logging.cpp Normal file
View file

@ -0,0 +1,74 @@
#include "logging.hpp"
#include <cstdio>
#include <cstring>
#include <qlogging.h>
#include <qstring.h>
#include <qtenvironmentvariables.h>
namespace {
bool COLOR_LOGS = false; // NOLINT
void formatMessage(
QtMsgType type,
const QMessageLogContext& context,
const QString& msg,
bool color
) {
const auto* typeString = "[log error]";
if (color) {
switch (type) {
case QtDebugMsg: typeString = "\033[34m DEBUG"; break;
case QtInfoMsg: typeString = "\033[32m INFO"; break;
case QtWarningMsg: typeString = "\033[33m WARN"; break;
case QtCriticalMsg: typeString = "\033[31m ERROR"; break;
case QtFatalMsg: typeString = "\033[31m FATAL"; break;
}
} else {
switch (type) {
case QtDebugMsg: typeString = " DEBUG"; break;
case QtInfoMsg: typeString = " INFO"; break;
case QtWarningMsg: typeString = " WARN"; break;
case QtCriticalMsg: typeString = " ERROR"; break;
case QtFatalMsg: typeString = " FATAL"; break;
}
}
const auto isDefault = strcmp(context.category, "default") == 0;
const char* format = nullptr;
if (color) {
if (type == QtFatalMsg) {
if (isDefault) format = "%s: %s\033[0m\n";
else format = "%s %s: %s\033[0m\n";
} else {
if (isDefault) format = "%s\033[0m: %s\n";
else format = "%s \033[97m%s\033[0m: %s\n";
}
} else {
if (isDefault) format = "%s: %s\n";
else format = "%s %s: %s\n";
}
if (isDefault) {
printf(format, typeString, msg.toStdString().c_str());
} else {
printf(format, typeString, context.category, msg.toStdString().c_str());
}
fflush(stdout);
}
void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) {
formatMessage(type, context, msg, COLOR_LOGS);
}
} // namespace
void LogManager::setup() {
COLOR_LOGS = qEnvironmentVariableIsEmpty("NO_COLOR");
qInstallMessageHandler(&messageHandler);
}

6
src/core/logging.hpp Normal file
View file

@ -0,0 +1,6 @@
#pragma once
class LogManager {
public:
static void setup();
};

View file

@ -22,10 +22,12 @@
#include <qtextstream.h>
#include <qtpreprocessorsupport.h>
#include "logging.hpp"
#include "plugin.hpp"
#include "rootwrapper.hpp"
int qs_main(int argc, char** argv) {
LogManager::setup();
QString configFilePath;
QString workingDirectory;
@ -330,11 +332,9 @@ int qs_main(int argc, char** argv) {
file.close();
}
qInfo() << "shell id:" << shellId;
if (printCurrent) {
qInfo() << "shell id:" << shellId;
return 0;
}
if (printCurrent) return 0;
for (auto [var, val]: envOverrides.asKeyValueRange()) {
qputenv(var.toUtf8(), val.toUtf8());