mirror of
https://github.com/zeek/zeek.git
synced 2025-10-15 13:08:20 +00:00

The Logger class is now in charge of reporting all errors, warnings, informational messages, weirds, and syslogs. All other components route their messages through the global bro_logger singleton. The Logger class comes with these reporting methods: void Message(const char* fmt, ...); void Warning(const char* fmt, ...); void Error(const char* fmt, ...); void FatalError(const char* fmt, ...); // Terminate Bro. void Weird(const char* name); [ .. some more Weird() variants ... ] void Syslog(const char* fmt, ...); void InternalWarning(const char* fmt, ...); void InternalError(const char* fmt, ...); // Terminates Bro. See Logger.h for more information on these. Generally, the reporting now works as follows: - All non-fatal message are reported in one of two ways: (1) At startup (i.e., before we start processing packets), they are logged to stderr. (2) During processing, they turn into events: event log_message%(msg: string, location: string%); event log_warning%(msg: string, location: string%); event log_error%(msg: string, location: string%); The script level can then handle them as desired. If we don't have an event handler, we fall back to reporting on stderr. - All fatal errors are logged to stderr and Bro terminates immediately. - Syslog(msg) directly syslogs, but doesn't do anything else. The three main types of messages can also be generated on the scripting layer via new Log::* bifs: Log::error(msg: string); Log::warning(msg: string); Log::message(msg: string); These pass through the bro_logger as well and thus are handled in the same way. Their output includes location information. More changes: - Removed the alarm statement and the alarm_hook event. - Adapted lots of locations to use the bro_logger, including some of the messages that were previously either just written to stdout, or even funneled through the alarm mechanism. - No distinction anymore between Error() and RunTime(). There's now only one class of errors; the line was quite blurred already anyway. - util.h: all the error()/warn()/message()/run_time()/pinpoint() functions are gone. Use the bro_logger instead now. - Script errors are formatted a bit differently due to the changes. What I've seen so far looks ok to me, but let me know if there's something odd. Notes: - The default handlers for the new log_* events are just dummy implementations for now since we need to integrate all this into the new scripts anyway. - I'm not too happy with the names of the Logger class and its instance bro_logger. We now have a LogMgr as well, which makes this all a bit confusing. But I didn't have a good idea for better names so I stuck with them for now. Perhaps we should merge Logger and LogMgr?
34 lines
838 B
C
34 lines
838 B
C
// $Id: StmtEnums.h 6219 2008-10-01 05:39:07Z vern $
|
|
//
|
|
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
|
|
#ifndef stmt_enums_h
|
|
#define stmt_enums_h
|
|
|
|
// These are in a separate file to break circular dependences
|
|
typedef enum {
|
|
STMT_ANY = -1,
|
|
STMT_ALARM, // Does no longer exist but kept to create enums consistent.
|
|
STMT_PRINT, STMT_EVENT,
|
|
STMT_EXPR,
|
|
STMT_IF, STMT_WHEN, STMT_SWITCH,
|
|
STMT_FOR, STMT_NEXT, STMT_BREAK,
|
|
STMT_RETURN,
|
|
STMT_ADD, STMT_DELETE,
|
|
STMT_LIST, STMT_EVENT_BODY_LIST,
|
|
STMT_INIT,
|
|
STMT_NULL
|
|
#define NUM_STMTS (int(STMT_NULL) + 1)
|
|
} BroStmtTag;
|
|
|
|
typedef enum {
|
|
FLOW_NEXT, // continue on to next statement
|
|
FLOW_LOOP, // go to top of loop
|
|
FLOW_BREAK, // break out of loop
|
|
FLOW_RETURN // return from function
|
|
} stmt_flow_type;
|
|
|
|
extern const char* stmt_name(BroStmtTag t);
|
|
|
|
#endif
|