|
|
|
@ -202,8 +202,24 @@ main(int argc, char *argv[]) |
|
|
|
|
QCommandLineParser parser; |
|
|
|
|
parser.addHelpOption(); |
|
|
|
|
parser.addVersionOption(); |
|
|
|
|
QCommandLineOption debugOption(QStringLiteral("debug"), QStringLiteral("Enable debug output")); |
|
|
|
|
QCommandLineOption debugOption(QStringLiteral("debug"), |
|
|
|
|
QObject::tr("Alias for '--log-level trace'.")); |
|
|
|
|
parser.addOption(debugOption); |
|
|
|
|
QCommandLineOption logLevel( |
|
|
|
|
QStringList() << QStringLiteral("l") << QStringLiteral("log-level"), |
|
|
|
|
QObject::tr("Set the global log level, or a comma-separated list of <component>=<level> " |
|
|
|
|
"pairs, or both. For example, to set the default log level to 'warn' but " |
|
|
|
|
"disable logging for the 'ui' component, pass 'warn,ui=off'. " |
|
|
|
|
"levels:{trace,debug,info,warning,error,critical,off} " |
|
|
|
|
"components:{crypto,db,mtx,net,qml,ui}"), |
|
|
|
|
QObject::tr("level")); |
|
|
|
|
parser.addOption(logLevel); |
|
|
|
|
QCommandLineOption logType( |
|
|
|
|
QStringList() << QStringLiteral("L") << QStringLiteral("log-type"), |
|
|
|
|
QObject::tr("Set the log output type. A comma-separated list is allowed. " |
|
|
|
|
"The default is 'file,stderr'. types:{file,stderr,none}"), |
|
|
|
|
QObject::tr("type")); |
|
|
|
|
parser.addOption(logType); |
|
|
|
|
|
|
|
|
|
// This option is not actually parsed via Qt due to the need to parse it before the app
|
|
|
|
|
// name is set. It only exists to keep Qt from complaining about the --profile/-p
|
|
|
|
@ -254,15 +270,36 @@ main(int argc, char *argv[]) |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (parser.isSet(debugOption)) |
|
|
|
|
nhlog::enable_debug_log_from_commandline = true; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
nhlog::init(QStringLiteral("%1/nheko.log") |
|
|
|
|
.arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)) |
|
|
|
|
.toStdString()); |
|
|
|
|
QString level; |
|
|
|
|
if (parser.isSet(logLevel)) { |
|
|
|
|
level = parser.value(logLevel); |
|
|
|
|
} else if (parser.isSet(debugOption)) { |
|
|
|
|
level = "trace"; |
|
|
|
|
} else { |
|
|
|
|
level = qEnvironmentVariable("NHEKO_LOG_LEVEL"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QStringList targets = |
|
|
|
|
(parser.isSet(logType) ? parser.value(logType) |
|
|
|
|
: qEnvironmentVariable("NHEKO_LOG_TYPE", "file,stderr")) |
|
|
|
|
.split(',', Qt::SkipEmptyParts); |
|
|
|
|
targets.removeAll("none"); |
|
|
|
|
bool to_stderr = bool(targets.removeAll("stderr")); |
|
|
|
|
QString path = targets.removeAll("file") |
|
|
|
|
? QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)) |
|
|
|
|
.filePath("nheko.log") |
|
|
|
|
: QLatin1String(""); |
|
|
|
|
if (!targets.isEmpty()) { |
|
|
|
|
std::cerr << "Invalid log type '" << targets.first().toStdString().c_str() << "'" |
|
|
|
|
<< std::endl; |
|
|
|
|
std::exit(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
nhlog::init(level, path, to_stderr); |
|
|
|
|
|
|
|
|
|
} catch (const spdlog::spdlog_ex &ex) { |
|
|
|
|
std::cout << "Log initialization failed: " << ex.what() << std::endl; |
|
|
|
|
std::cerr << "Log initialization failed: " << ex.what() << std::endl; |
|
|
|
|
std::exit(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|