Atlas源码剖析(六)

日志管理

基本数据结构:

typedef struct {
        GLogLevelFlags min_lvl;			//glib中对应的日志级别,初始为critical,
										//后改赋为message

        gchar *log_filename;				//日志文件名free
        gint log_file_fd;					//打开的日志文件对应的文件描述符

        gboolean use_syslog;				//是否使用系统日志

#ifdef _WIN32
        HANDLE event_source_handle;
        gboolean use_windows_applog;
#endif
gboolean rotate_logs;	//如果此标志被设置,在写入日志时重新//打开日志文件

        GString *log_ts_str;				//经组装后要写入到日志中的信息free
        gint     log_ts_resolution;     /*<< timestamp resolution (sec, ms) */

        GString *last_msg;				//记录最后写入的信息free
        time_t   last_msg_ts;				//记录最后写入信息的时间
        guint    last_msg_count;			//记录最后写入的相同信息的次数
} chassis_log; 



在读取配置信息前,开启日志,将日志级别设置为G_LOG_LEVEL_MESSAGE,调用g_log_set_default_handler设置glib中日志处理函数为chassis_log_func,同时设置参数为chassis_log,同时将chassis_log赋给chassis中的log成员。

/* start the logging ... to stderr */
log = chassis_log_new();
log->min_lvl = G_LOG_LEVEL_MESSAGE; /* display messages while parsing or loading plugins */
g_log_set_default_handler(chassis_log_func, log);
...
srv->log = log; /* we need the log structure for the log-rotation */
此时日志文件未打开,也没有设置系统日志,所写的日志记录将会输出到标准错误;


日志文件的目录配置中的log_path,目录文件的名字为instance_name.log,另外保存pid的文件也保存在log目录下,文件名为instance_name.pid。日志文件以0660的权限打开。

log->log_filename = g_strdup_printf("%s/%s.log", frontend->log_path, frontend->instance_name);
frontend->pid_file = g_strdup_printf("%s/%s.pid", frontend->log_path, frontend->instance_name);
srv->log_path = g_strdup(frontend->log_path);
...

log->use_syslog = frontend->use_syslog;
if (log->log_filename && log->use_sys
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值