Aerospike C 客戶端內建日誌設施,預設輸出至 stderr。應用可:
// 3.0.86+ 版本
as_log_set_level(AS_LOG_LEVEL_DEBUG);
// 3.0.85 及舊版本
as_log_set_level(&as->log, AS_LOG_LEVEL_DEBUG);
| 常數 | 用途 |
|---|---|
AS_LOG_LEVEL_OFF | 關閉所有日誌 |
AS_LOG_LEVEL_ERROR | 僅錯誤 |
AS_LOG_LEVEL_WARN | 警告與錯誤 |
AS_LOG_LEVEL_INFO | 資訊、警告、錯誤(生產環境建議) |
AS_LOG_LEVEL_DEBUG | 除錯資訊(開發/測試) |
AS_LOG_LEVEL_TRACE | 最詳細追蹤(效能分析) |
typedef bool (*as_log_callback)(as_log_level level, const char *func,
const char *file, uint32_t line,
const char *fmt, ...);
level:日誌級別func:記錄日誌的函數名file:原始碼檔案名line:行號fmt + 可變參數:格式化字串true 表示處理完成,false 可能影響內部邏輯bool my_log_callback(as_log_level level, const char *func,
const char *file, uint32_t line,
const char *fmt, ...) {
char msg[1024] = {0};
va_list ap;
va_start(ap, fmt);
vsnprintf(msg, sizeof(msg), fmt, ap);
msg[sizeof(msg)-1] = '\0';
va_end(ap);
// 格式:[檔案:行號][函數] 級別 - 訊息
fprintf(stderr, "[%s:%d][%s] %d - %s\n", file, line, func, level, msg);
return true;
}
// 3.0.86+
as_log_set_level(AS_LOG_LEVEL_INFO);
as_log_set_callback(my_log_callback);
// 3.0.85 舊版
as_log_set_level(&as->log, AS_LOG_LEVEL_INFO);
as_log_set_callback(&as->log, my_log_callback);
bool syslog_callback(as_log_level level, const char *func,
const char *file, uint32_t line,
const char *fmt, ...) {
char msg[2048];
va_list ap;
va_start(ap, fmt);
vsnprintf(msg, sizeof(msg), fmt, ap);
va_end(ap);
int syslog_level;
switch (level) {
case AS_LOG_LEVEL_ERROR: syslog_level = LOG_ERR; break;
case AS_LOG_LEVEL_WARN: syslog_level = LOG_WARNING; break;
case AS_LOG_LEVEL_INFO: syslog_level = LOG_INFO; break;
case AS_LOG_LEVEL_DEBUG: syslog_level = LOG_DEBUG; break;
default: syslog_level = LOG_NOTICE;
}
syslog(syslog_level, "[%s:%d][%s] %s", file, line, func, msg);
return true;
}
bool json_callback(as_log_level level, const char *func,
const char *file, uint32_t line,
const char *fmt, ...) {
char msg[1024];
va_list ap;
va_start(ap, fmt);
vsnprintf(msg, sizeof(msg), fmt, ap);
va_end(ap);
// 簡易 JSON,生產建議使用 cJSON/rapidjson
time_t now = time(NULL);
struct tm *tm = gmtime(&now);
char timestamp[32];
strftime(timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%SZ", tm);
fprintf(stderr,
"{\"timestamp\":\"%s\",\"level\":%d,\"file\":\"%s\",\"line\":%u,\"func\":\"%s\",\"msg\":\"%s\"}\n",
timestamp, level, file, line, func, msg);
return true;
}
as_log_set_level()、as_log_set_callback()&as->log 傳遞INFO 或 WARN 級別DEBUG/TRACE 會顯著影響延遲