logging: convert file logging to non-thread module

pull/2245/head
Jason Ish 10 years ago committed by Victor Julien
parent 669827ae16
commit f9bb9029c5

@ -455,17 +455,9 @@ int LogFileLogOpenFileCtx(LogFileCtx *file_ctx, const char *filename, const
void TmModuleLogFileLogRegister (void) void TmModuleLogFileLogRegister (void)
{ {
tmm_modules[TMM_FILELOG].name = MODULE_NAME;
tmm_modules[TMM_FILELOG].ThreadInit = LogFileLogThreadInit;
tmm_modules[TMM_FILELOG].Func = NULL;
tmm_modules[TMM_FILELOG].ThreadExitPrintStats = LogFileLogExitPrintStats;
tmm_modules[TMM_FILELOG].ThreadDeinit = LogFileLogThreadDeinit;
tmm_modules[TMM_FILELOG].RegisterTests = NULL;
tmm_modules[TMM_FILELOG].cap_flags = 0;
tmm_modules[TMM_FILELOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterFileModule(MODULE_NAME, "file-log", LogFileLogInitCtx, OutputRegisterFileModule(MODULE_NAME, "file-log", LogFileLogInitCtx,
LogFileLogger); LogFileLogger, LogFileLogThreadInit, LogFileLogThreadDeinit,
LogFileLogExitPrintStats);
SCLogDebug("registered"); SCLogDebug("registered");
} }

@ -51,15 +51,23 @@ typedef struct OutputFileLogger_ {
struct OutputFileLogger_ *next; struct OutputFileLogger_ *next;
const char *name; const char *name;
TmmId module_id; TmmId module_id;
ThreadInitFunc ThreadInit;
ThreadDeinitFunc ThreadDeinit;
ThreadExitPrintStatsFunc ThreadExitPrintStats;
} OutputFileLogger; } OutputFileLogger;
static OutputFileLogger *list = NULL; static OutputFileLogger *list = NULL;
int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *output_ctx) int OutputRegisterFileLogger(const char *name, FileLogger LogFunc,
OutputCtx *output_ctx, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
#if 0
int module_id = TmModuleGetIdByName(name); int module_id = TmModuleGetIdByName(name);
if (module_id < 0) if (module_id < 0)
return -1; return -1;
#endif
OutputFileLogger *op = SCMalloc(sizeof(*op)); OutputFileLogger *op = SCMalloc(sizeof(*op));
if (op == NULL) if (op == NULL)
@ -69,7 +77,12 @@ int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *ou
op->LogFunc = LogFunc; op->LogFunc = LogFunc;
op->output_ctx = output_ctx; op->output_ctx = output_ctx;
op->name = name; op->name = name;
#if 0
op->module_id = (TmmId) module_id; op->module_id = (TmmId) module_id;
#endif
op->ThreadInit = ThreadInit;
op->ThreadDeinit = ThreadDeinit;
op->ThreadExitPrintStats = ThreadExitPrintStats;
if (list == NULL) if (list == NULL)
list = op; list = op;
@ -190,16 +203,9 @@ static TmEcode OutputFileLogThreadInit(ThreadVars *tv, void *initdata, void **da
OutputFileLogger *logger = list; OutputFileLogger *logger = list;
while (logger) { while (logger) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadInit) {
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadInit) {
void *retptr = NULL; void *retptr = NULL;
if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) { if (logger->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts)); OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
/* todo */ BUG_ON(ts == NULL); /* todo */ BUG_ON(ts == NULL);
memset(ts, 0x00, sizeof(*ts)); memset(ts, 0x00, sizeof(*ts));
@ -233,15 +239,8 @@ static TmEcode OutputFileLogThreadDeinit(ThreadVars *tv, void *thread_data)
OutputFileLogger *logger = list; OutputFileLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadDeinit) {
if (tm_module == NULL) { logger->ThreadDeinit(tv, store->thread_data);
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadDeinit) {
tm_module->ThreadDeinit(tv, store->thread_data);
} }
OutputLoggerThreadStore *next_store = store->next; OutputLoggerThreadStore *next_store = store->next;
@ -261,15 +260,8 @@ static void OutputFileLogExitPrintStats(ThreadVars *tv, void *thread_data)
OutputFileLogger *logger = list; OutputFileLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadExitPrintStats) {
if (tm_module == NULL) { logger->ThreadExitPrintStats(tv, store->thread_data);
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadExitPrintStats) {
tm_module->ThreadExitPrintStats(tv, store->thread_data);
} }
logger = logger->next; logger = logger->next;

@ -37,7 +37,9 @@ typedef int (*FileLogger)(ThreadVars *, void *thread_data, const Packet *, const
*/ */
//typedef int (*TxLogCondition)(ThreadVars *, const Packet *); //typedef int (*TxLogCondition)(ThreadVars *, const Packet *);
int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *); int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
void TmModuleFileLoggerRegister (void); void TmModuleFileLoggerRegister (void);

@ -290,28 +290,17 @@ OutputCtx *OutputFileLogInitSub(ConfNode *conf, OutputCtx *parent_ctx)
void TmModuleJsonFileLogRegister (void) void TmModuleJsonFileLogRegister (void)
{ {
tmm_modules[TMM_JSONFILELOG].name = "JsonFileLog";
tmm_modules[TMM_JSONFILELOG].ThreadInit = JsonFileLogThreadInit;
tmm_modules[TMM_JSONFILELOG].ThreadDeinit = JsonFileLogThreadDeinit;
tmm_modules[TMM_JSONFILELOG].flags = TM_FLAG_LOGAPI_TM;
/* register as child of eve-log */ /* register as child of eve-log */
OutputRegisterFileSubModule("eve-log", "JsonFileLog", "eve-log.files", OutputRegisterFileSubModule("eve-log", "JsonFileLog", "eve-log.files",
OutputFileLogInitSub, JsonFileLogger); OutputFileLogInitSub, JsonFileLogger, JsonFileLogThreadInit,
JsonFileLogThreadDeinit, NULL);
} }
#else #else
static TmEcode OutputJsonThreadInit(ThreadVars *t, void *initdata, void **data)
{
SCLogInfo("Can't init JSON output - JSON support was disabled during build.");
return TM_ECODE_FAILED;
}
void TmModuleJsonFileLogRegister (void) void TmModuleJsonFileLogRegister (void)
{ {
tmm_modules[TMM_JSONFILELOG].name = "JsonFileLog"; SCLogInfo("Can't register JSON output - JSON support was disabled during build.");
tmm_modules[TMM_JSONFILELOG].ThreadInit = OutputJsonThreadInit;
} }
#endif #endif

@ -344,7 +344,9 @@ void OutputRegisterTxSubModule(const char *parent_name, const char *name,
*/ */
void void
OutputRegisterFileModule(const char *name, const char *conf_name, OutputRegisterFileModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc) OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
if (unlikely(FileLogFunc == NULL)) { if (unlikely(FileLogFunc == NULL)) {
goto error; goto error;
@ -359,6 +361,9 @@ OutputRegisterFileModule(const char *name, const char *conf_name,
module->conf_name = conf_name; module->conf_name = conf_name;
module->InitFunc = InitFunc; module->InitFunc = InitFunc;
module->FileLogFunc = FileLogFunc; module->FileLogFunc = FileLogFunc;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("File logger \"%s\" registered.", name); SCLogDebug("File logger \"%s\" registered.", name);
@ -379,7 +384,9 @@ error:
void void
OutputRegisterFileSubModule(const char *parent_name, const char *name, OutputRegisterFileSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
FileLogger FileLogFunc) FileLogger FileLogFunc, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
if (unlikely(FileLogFunc == NULL)) { if (unlikely(FileLogFunc == NULL)) {
goto error; goto error;
@ -395,6 +402,9 @@ OutputRegisterFileSubModule(const char *parent_name, const char *name,
module->parent_name = parent_name; module->parent_name = parent_name;
module->InitSubFunc = InitFunc; module->InitSubFunc = InitFunc;
module->FileLogFunc = FileLogFunc; module->FileLogFunc = FileLogFunc;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("File logger \"%s\" registered.", name); SCLogDebug("File logger \"%s\" registered.", name);

@ -117,10 +117,14 @@ void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
ThreadExitPrintStatsFunc ThreadExitPrintStats); ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterFileModule(const char *name, const char *conf_name, void OutputRegisterFileModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc); OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterFileSubModule(const char *parent_name, const char *name, void OutputRegisterFileSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
FileLogger FileLogFunc); FileLogger FileLogFunc, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterFiledataModule(const char *name, const char *conf_name, void OutputRegisterFiledataModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), FiledataLogger FiledataLogFunc); OutputCtx *(*InitFunc)(ConfNode *), FiledataLogger FiledataLogFunc);

@ -684,7 +684,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
} }
} else if (module->FileLogFunc) { } else if (module->FileLogFunc) {
SCLogDebug("%s is a file logger", module->name); SCLogDebug("%s is a file logger", module->name);
OutputRegisterFileLogger(module->name, module->FileLogFunc, output_ctx); OutputRegisterFileLogger(module->name, module->FileLogFunc, output_ctx,
module->ThreadInit, module->ThreadDeinit,
module->ThreadExitPrintStats);
/* need one instance of the tx logger module */ /* need one instance of the tx logger module */
if (file_logger_module == NULL) { if (file_logger_module == NULL) {

@ -216,7 +216,6 @@ const char * TmModuleTmmIdToString(TmmId id)
CASE_CODE (TMM_LOGTLSLOG); CASE_CODE (TMM_LOGTLSLOG);
CASE_CODE (TMM_LOGTCPDATALOG); CASE_CODE (TMM_LOGTCPDATALOG);
CASE_CODE (TMM_PCAPLOG); CASE_CODE (TMM_PCAPLOG);
CASE_CODE (TMM_FILELOG);
CASE_CODE (TMM_FILESTORE); CASE_CODE (TMM_FILESTORE);
CASE_CODE (TMM_DECODEIPFW); CASE_CODE (TMM_DECODEIPFW);
CASE_CODE (TMM_VERDICTIPFW); CASE_CODE (TMM_VERDICTIPFW);
@ -238,7 +237,6 @@ const char * TmModuleTmmIdToString(TmmId id)
CASE_CODE (TMM_FILELOGGER); CASE_CODE (TMM_FILELOGGER);
CASE_CODE (TMM_FILEDATALOGGER); CASE_CODE (TMM_FILEDATALOGGER);
CASE_CODE (TMM_STREAMINGLOGGER); CASE_CODE (TMM_STREAMINGLOGGER);
CASE_CODE (TMM_JSONFILELOG);
CASE_CODE (TMM_OUTPUTJSON); CASE_CODE (TMM_OUTPUTJSON);
CASE_CODE (TMM_FLOWMANAGER); CASE_CODE (TMM_FLOWMANAGER);
CASE_CODE (TMM_FLOWRECYCLER); CASE_CODE (TMM_FLOWRECYCLER);

@ -47,7 +47,6 @@ typedef enum {
TMM_LOGTCPDATALOG, TMM_LOGTCPDATALOG,
TMM_OUTPUTJSON, TMM_OUTPUTJSON,
TMM_PCAPLOG, TMM_PCAPLOG,
TMM_FILELOG,
TMM_FILESTORE, TMM_FILESTORE,
TMM_DECODEIPFW, TMM_DECODEIPFW,
TMM_VERDICTIPFW, TMM_VERDICTIPFW,
@ -71,7 +70,6 @@ typedef enum {
TMM_FILELOGGER, TMM_FILELOGGER,
TMM_FILEDATALOGGER, TMM_FILEDATALOGGER,
TMM_STREAMINGLOGGER, TMM_STREAMINGLOGGER,
TMM_JSONFILELOG,
TMM_RECEIVENFLOG, TMM_RECEIVENFLOG,
TMM_DECODENFLOG, TMM_DECODENFLOG,

Loading…
Cancel
Save