体验:https://pan.baidu.com/s/1oo0xmVbb_z3hVdPZs57Tyw?pwd=mqlc
提取码:mqlc
源码:源码链接
Logger:
这是 Log4Qt 的核心,用于记录日志消息。
日志器具有一个日志级别,用于决定哪些日志消息应该被记录。
日志器可以有一个或多个 Appender 关联。
Level:
代表日志级别(如 TRACE< DEBUG< INFO< WARN< ERROR< FATAL)。
决定哪些日志消息应该被记录。
所以,如果你设置了 INFO 级别,那么 TRACE 和 DEBUG 消息将被忽略,而 INFO, WARN, ERROR, 和 FATAL 消息会被处理。同样地,如果设置为 ERROR 级别,那么只有 ERROR 和 FATAL 消息会被处理。
Appender:
定义日志消息的输出目标。一个日志器可以有多个追加器。
ConsoleAppender:输出日志消息到控制台。
FileAppender:输出日志消息到文件。
…(其他追加器)
Layout:
决定日志消息的格式。
PatternLayout:根据一个模式字符串来格式化日志消息。
SimpleLayout:简单格式。
…(其他布局)
Filter:
在日志消息被追加器处理之前进行筛选。
可以有多个筛选条件。
LoggingEvent:
代表一个日志事件,包含日志消息、时间戳、日志级别等信息。
LoggerRepository:
用于管理和检索日志器的容器。
默认实现是 LoggerRepository,但可以有其他实现。
LogManager:
提供静态方法管理日志器和配置。
Configuration 类:
这些类和方法允许从外部配置文件(如 XML 或 properties 文件)配置 Log4Qt。这样,开发者可以不修改代码即可更改日志配置。
PropertyConfigurator 和 XmlConfigurator 是两个主要的配置器类。
关系概述:
所以说,使用这日志系统要至少有一个日志器,这个日志器要至少有一个追加器,追加器要有一个输出样式。
先看一个简单的例子:
Log4Qt::FileAppender *fileAppender= new Log4Qt::FileAppender;
fileAppender->setFile("file.log");
fileAppender->setLayout(patter);
fileAppender->setAppendFile(true);
fileAppender->activateOptions();
Log4Qt::RollingFileAppender *rollingAppender = new Log4Qt::RollingFileAppender;
rollingAppender->setLayout(patter);
rollingAppender->setFile("rolling.log");
rollingAppender->setAppendFile(true);
rollingAppender->setMaxBackupIndex(3);
rollingAppender->setMaximumFileSize(2*1024);
rollingAppender->activateOptions();
3. DailyFileAppender :每天新建一个文件,保存当天的日志,超过指定的天数,删除最开始的日志
Log4Qt::DailyFileAppender *dailiAppender = new Log4Qt::DailyFileAppender;
dailiAppender->setLayout(patter);
dailiAppender->setFile("Daili.log");
dailiAppender->setAppendFile(true);
dailiAppender->setDatePattern("_yyyy_MM_dd");
dailiAppender->setKeepDays(30);
dailiAppender->activateOptions();
4. DailyRollingFileAppender :以指定的滚动频率重名命名文件,例如,如果您的基本文件名是 application.log 并且您正在使用每天滚动,那么在 2023-08-18 的日志将被保存为 application.log.2023-08-18。不会自动删除日志文件。
Log4Qt::DailyRollingFileAppender *daliRollingAppender = new Log4Qt::DailyRollingFileAppender;
daliRollingAppender->setLayout(patter);
daliRollingAppender->setFile("DailiRolling.log");
daliRollingAppender->setAppendFile(true);
daliRollingAppender->setDatePattern("_yyyy_MM_dd");
daliRollingAppender->activateOptions();
Log4Qt::TelnetAppender *telnetAppender = new Log4Qt::TelnetAppender();
telnetAppender->setLayout(patter);
telnetAppender->setPort(2323);
telnetAppender->setAddress(QHostAddress::Any);
telnetAppender->setImmediateFlush(true);
telnetAppender->activateOptions();
Log4Qt::DatabaseLayout *dbLayout = new Log4Qt::DatabaseLayout();
dbLayout->setTimeStampColumn("timestamp");
dbLayout->setLoggenameColumn("logger_name");
dbLayout->setThreadNameColumn("thread_name");
dbLayout->setLevelColumn("log_level");
dbLayout->setMessageColumn("message");
Log4Qt::DatabaseAppender *dbAppender = new Log4Qt::DatabaseAppender();
dbAppender->setLayout(dbLayout);
dbAppender->setConnection(db.connectionName());
dbAppender->setTable("logRecord");
dbAppender->activateOptions();
rootLogger->addAppender(dbAppender);
Log4Qt::SignalAppender *signalAppender = new Log4Qt::SignalAppender;
signalAppender->setLayout(patter);
signalAppender->activateOptions();
connect(signalAppender,SIGNAL(appended(QString)),ui->textEdit,SLOT(append(QString)));
properties默认支持的日志:
void Factory::registerDefaultAppenders()
{
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.ConsoleAppender"), console_file_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::ConsoleAppender"), console_file_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.DailyRollingFileAppender"), create_daily_rolling_file_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::DailyRollingFileAppender"), create_daily_rolling_file_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.varia.DebugAppender"), create_debug_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::DebugAppender"), create_debug_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.FileAppender"), create_file_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::FileAppender"), create_file_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.varia.ListAppender"), create_list_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::ListAppender"), create_list_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.varia.NullAppender"), create_null_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::NullAppender"), create_null_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.RollingFileAppender"), create_rolling_file_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::RollingFileAppender"), create_rolling_file_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.SignalAppender"), create_signal_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::SignalAppender"), create_signal_appender);
#ifdef Q_OS_WIN
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.ColorConsoleAppender"), create_color_console_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::ColorConsoleAppender"), create_color_console_appender);
#endif
#if defined(QT_SQL_LIB)
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.DatabaseAppender"), create_database_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::DatabaseAppender"), create_database_appender);
#endif //#ifdef QT_SQL_LIB
#if defined(QT_NETWORK_LIB)
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.TelnetAppender"), create_telnet_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::TelnetAppender"), create_telnet_appender);
#endif
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.AsyncAppender"), create_async_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::AsyncAppender"), create_async_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.MainThreadAppender"), create_mainthread_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::MainThreadAppender"), create_mainthread_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.SystemLogAppender"), create_systemlog_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::SystemLogAppender"), create_systemlog_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.BinaryFileAppender"), create_binaryfile_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::BinaryFileAppender"), create_binaryfile_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.RollingBinaryFileAppender"), create_rollingbinaryfile_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::RollingBinaryFileAppender"), create_rollingbinaryfile_appender);
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.DailyFileAppender"), create_dailyrollingfile_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::DailyFileAppender"), create_dailyrollingfile_appender);
#ifdef Q_OS_WIN
mAppenderRegistry.insert(QStringLiteral("org.apache.log4j.WDCAppender"), create_wdc_appender);
mAppenderRegistry.insert(QStringLiteral("Log4Qt::WDCAppender"), create_wdc_appender);
#endif
}