日志模块是Tor系统中一个非常重要的部件。它将Tor系统中的所有事件,分成不同的严重级别,分成不同的系统域,进行统一的日志处理。同时它还维护着一个日志记录链表。日志记录链表内存储的是所有日志需要输出的目标日志文件或目标日志输出位置。下文中我们会详细地对日志模块进行分析,并简要说明源文件中的各函数的简单作用。
1. 严重等级和域
日志模块内定义了5个严重等级,其具体的设定如下:
/** Debug-level severity: for hyper-verbose messages of no interest to
* anybody but developers. */
#define LOG_DEBUG 7
/** Info-level severity: for messages that appear frequently during normal
* operation. */
#define LOG_INFO 6
/** Notice-level severity: for messages that appear infrequently
* during normal operation; that the user will probably care about;
* and that are not errors.
*/
#define LOG_NOTICE 5
/** Warn-level severity: for messages that only appear when something has gone
* wrong. */
#define LOG_WARN 4
/** Error-level severity: for messages that only appear when something has gone
* very wrong, and the Tor process can no longer proceed. */
#define LOG_ERR 3
五个严重等级所对应的数字越小,说明他们的严重性越高。
日志模块内同时定义了许多个域,用于记录日志时标记日志是系统中哪个域输出的日志:
/* Logging domains */
/** Catch-all for miscellaneous events and fatal errors. */
#define LD_GENERAL (1u<<0)
/** The cryptography subsystem. */
#define LD_CRYPTO (1u<<1)
/** Networking. */
#define LD_NET (1u<<2)
/** Parsing and acting on our configuration. */
#define LD_CONFIG (1u<<3)
/** Reading and writing from the filesystem. */
#define LD_FS