注冊事務日志線程模塊
void TmModuleTxLoggerRegister (void)
{tmm_modules[TMM_TXLOGGER].name = "__tx_logger__";tmm_modules[TMM_TXLOGGER].ThreadInit = OutputTxLogThreadInit;tmm_modules[TMM_TXLOGGER].Func = OutputTxLog;tmm_modules[TMM_TXLOGGER].ThreadExitPrintStats = OutputTxLogExitPrintStats;tmm_modules[TMM_TXLOGGER].ThreadDeinit = OutputTxLogThreadDeinit;tmm_modules[TMM_TXLOGGER].cap_flags = 0;
}
注冊協議的線程模塊
void TmModuleJsonDnsLogRegister (void)
{tmm_modules[TMM_JSONDNSLOG].name = MODULE_NAME;tmm_modules[TMM_JSONDNSLOG].ThreadInit = LogDnsLogThreadInit;tmm_modules[TMM_JSONDNSLOG].ThreadDeinit = LogDnsLogThreadDeinit;tmm_modules[TMM_JSONDNSLOG].RegisterTests = NULL;tmm_modules[TMM_JSONDNSLOG].cap_flags = 0;tmm_modules[TMM_JSONDNSLOG].flags = TM_FLAG_LOGAPI_TM;OutputRegisterTxModule(MODULE_NAME, "dns-json-log", JsonDnsLogInitCtx,ALPROTO_DNS, JsonDnsLogger);OutputRegisterTxSubModule("eve-log", MODULE_NAME, "eve-log.dns", JsonDnsLogInitCtxSub,ALPROTO_DNS, JsonDnsLogger);
}
注冊協議的日志線程初始化和銷毀函數
注冊協議的事務日志模塊
void
/*** \brief Register a tx output module.** This function will register an output module so it can be* configured with the configuration file.** \retval Returns 0 on success, -1 on failure.*/
void
OutputRegisterTxModule(const char *name, const char *conf_name,OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,TxLogger TxLogFunc)
注冊協議的事務日志模塊,存儲到output_modules
初始化輸出
/*** Initialize the output modules.*/
void RunModeInitializeOutputs(void)
根據配置選擇加載輸出模塊,調用SetupOutput將輸出模塊添加到OutputPacketLogger *list;
初始化TxLogger線程
/** \brief thread init for the tx logger* This will run the thread init functions for the individual registered* loggers */
static TmEcode OutputTxLogThreadInit(ThreadVars *tv, void *initdata, void **data)
遍歷前面添加到OutputPacketLogger *list的日志模塊,調用日志模塊對應的線程模塊的線程初始化函數,對日志模塊進行初始化。
日志輸出
static TmEcode OutputTxLog(ThreadVars *tv, Packet *p, void *thread_data, PacketQueue *pq, PacketQueue *postpq)
遍歷所有事務日志模塊OutputTxLogger *list,找到事務協議對應的日志模塊,調用日志輸出函數輸出日志。