📄 logger.c
字号:
/*************************************************************************** * logger.c * * Fri Aug 24 09:51:29 2007 * Copyright 2007 hunbuso * hunbuso@gmail.com ****************************************************************************/#include "main.h"#include "logger.h"#define LOG_ALL_LEVELS \ (G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION)typedef struct _LogHandler { gchar *domain; GLogLevelFlags level; guint id;} LogHandler;static LogHandler log_handlers[] = { {NULL, LOG_ALL_LEVELS}, {"Glib", LOG_ALL_LEVELS}, {"Gtk", LOG_ALL_LEVELS}};static guint log_handler_count = G_N_ELEMENTS(log_handlers);static FILE *proxyfish_log_file = NULL;G_LOCK_DEFINE_STATIC(proxyfish_log_file);static const gchar *get_timestamp_str(void){ time_t current_time = time(NULL); return ctime(¤t_time);}static size_tget_filesize(const gchar *filename){ struct stat info; if (stat(filename, &info)) return 0; return info.st_size;}static voidlog_to_file(const gchar * domain, GLogLevelFlags level, const gchar * message, gpointer data){ FILE *file = (FILE *) data; g_return_if_fail(file != NULL); g_return_if_fail(message != NULL); G_LOCK(proxyfish_log_file); if (domain) g_fprintf(file, "(%s) ", domain); g_fprintf(file, "%s\n", message); fflush(file); G_UNLOCK(proxyfish_log_file);}gbooleanproxyfish_logger_start(const gchar * filename){ guint i; g_return_val_if_fail(filename != NULL, FALSE); /* 如果文件大于最大值则剪切 */ if (get_filesize(filename) < PROXYFISH_LOGGER_FILE_MAX_SIZE) proxyfish_log_file = fopen(filename, "at"); else proxyfish_log_file = fopen(filename, "w+t"); if (!proxyfish_log_file) { g_printerr(_("Unable to create log file (%s)!\n"), filename); return FALSE; } for (i = 0; i < log_handler_count; i++) { log_handlers[i].id = g_log_set_handler(log_handlers[i].domain, log_handlers[i].level, log_to_file, proxyfish_log_file); } g_message("\n** LOGGING STARTED AT %s", get_timestamp_str()); return TRUE;}voidproxyfish_logger_stop(void){ guint i; if (!proxyfish_log_file) return; g_message("\n** LOGGING STOPPED AT %s", get_timestamp_str()); for (i = 0; i < log_handler_count; i++) g_log_remove_handler(log_handlers[i].domain, log_handlers[i].id); fclose(proxyfish_log_file); proxyfish_log_file = NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -