forked from quickshell/quickshell
		
	core/log: add fancy logger
This commit is contained in:
		
							parent
							
								
									533b389742
								
							
						
					
					
						commit
						46f48f2f87
					
				
					 4 changed files with 85 additions and 4 deletions
				
			
		| 
						 | 
					@ -37,6 +37,7 @@ qt_add_library(quickshell-core STATIC
 | 
				
			||||||
	types.cpp
 | 
						types.cpp
 | 
				
			||||||
	qsmenuanchor.cpp
 | 
						qsmenuanchor.cpp
 | 
				
			||||||
	clock.cpp
 | 
						clock.cpp
 | 
				
			||||||
 | 
						logging.cpp
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS GIT_REVISION="${GIT_REVISION}")
 | 
					set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS GIT_REVISION="${GIT_REVISION}")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										74
									
								
								src/core/logging.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/core/logging.cpp
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										6
									
								
								src/core/logging.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LogManager {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						static void setup();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -22,10 +22,12 @@
 | 
				
			||||||
#include <qtextstream.h>
 | 
					#include <qtextstream.h>
 | 
				
			||||||
#include <qtpreprocessorsupport.h>
 | 
					#include <qtpreprocessorsupport.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "logging.hpp"
 | 
				
			||||||
#include "plugin.hpp"
 | 
					#include "plugin.hpp"
 | 
				
			||||||
#include "rootwrapper.hpp"
 | 
					#include "rootwrapper.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int qs_main(int argc, char** argv) {
 | 
					int qs_main(int argc, char** argv) {
 | 
				
			||||||
 | 
						LogManager::setup();
 | 
				
			||||||
	QString configFilePath;
 | 
						QString configFilePath;
 | 
				
			||||||
	QString workingDirectory;
 | 
						QString workingDirectory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -330,11 +332,9 @@ int qs_main(int argc, char** argv) {
 | 
				
			||||||
		file.close();
 | 
							file.close();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						qInfo() << "shell id:" << shellId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (printCurrent) {
 | 
						if (printCurrent) return 0;
 | 
				
			||||||
		qInfo() << "shell id:" << shellId;
 | 
					 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (auto [var, val]: envOverrides.asKeyValueRange()) {
 | 
						for (auto [var, val]: envOverrides.asKeyValueRange()) {
 | 
				
			||||||
		qputenv(var.toUtf8(), val.toUtf8());
 | 
							qputenv(var.toUtf8(), val.toUtf8());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue