syslog 使用及宏
需求 syslog 虽然使用起来很方便,但是直接使用有几个问题: 虽然有日志信息,但是不够全面不方便定位 那么多的日志都混在一起,没有重点,调试时不方便 debug 和 release 时,日志应该不一样。 解决 日志信息更丰富 syslog 可以使用 __FILE__, __LINE__, __FUNCTION, 这几个来标识出当前的日志是在那个文件,第几行,哪个函数输出的。 syslog(LOG_DEBUG, "%s: %d: %s --> class construct", __FILE__, __LINE__, __FUNCTION__); 使用宏来开关日志 下面这个是普通替代的宏,可以用于开关日志. #ifdef xxx #define LOG(priority, format, ...) syslog(priority, format, ## __VA_ARGS__) #else #define LOG(priority, format, ...) #endif 使用宏来减少输入 但是每条日志都要这样写,就太麻烦了,我们可以使用宏来解决这个问题: #define LOG(priority, format, ...) syslog(priority, "%s: %d: %s --> "#format, __FILE__, __LINE__, __FUNCTION__, ## __VA_ARGS__) LOG(LOG_DEBUG, "class construct"); 上面这条宏,我们在使用时,不需要显式的写出相关的参数,宏展开的时候,会自动帮我们加上这些参数,日志会包含文件名,行号,函数名. 使用宏增加日志等级 当多条日志信息在一起的时候,比较难抓住重点,虽然可以使用搜索,但是终归没有那么方便。我们可以通过宏给日志消息里面附上对应的等级,也方便后期维护时使用脚本进行解析。 #define LOG(priority, format, ....