mirror of
https://github.com/zeek/zeek.git
synced 2025-10-14 04:28:20 +00:00
Reworking logging's postprocessor logic.
The main change is that the postprocessor commands are no longer run by the log writers themselves. Instead, the writers send back a message to the log mgr once they have rotated. The manager then calls a script level function to do somethign with the rotated file. By default, it will be renamed to somethingn nice and then a postprocessor shell command will be run on it if defined. Pieces going into this: - Terminology change: "postprocessor" now refers to a script *function*. In addition, there are "postprocessor commands", which are shell commands that may be triggered by the function to run on a rotated file. - The RotationInfo record now comes with all the information that was previously provided internally to the C++ function running the post-processor command. - Changing the default time format to %Y-%m-%d-%H-%M-%S - rotation_path_func is gone - The default postprocessor function is defined individually by each LogWriter in frameworks/logging/plugin/* - The interface to postprocessor shell commands remains the same. Needs a bit more testing ...
This commit is contained in:
parent
0e5bc16a60
commit
96a9d488e0
14 changed files with 225 additions and 160 deletions
|
@ -87,10 +87,10 @@ bool LogWriter::SetBuf(bool enabled)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool LogWriter::Rotate(string rotated_path, string postprocessor, double open,
|
||||
bool LogWriter::Rotate(string rotated_path, double open,
|
||||
double close, bool terminating)
|
||||
{
|
||||
if ( ! DoRotate(rotated_path, postprocessor, open, close, terminating) )
|
||||
if ( ! DoRotate(rotated_path, open, close, terminating) )
|
||||
{
|
||||
disabled = true;
|
||||
return false;
|
||||
|
@ -150,42 +150,8 @@ void LogWriter::DeleteVals(LogVal** vals)
|
|||
delete vals[i];
|
||||
}
|
||||
|
||||
bool LogWriter::RunPostProcessor(string fname, string postprocessor,
|
||||
string old_name, double open, double close,
|
||||
bool terminating)
|
||||
bool LogWriter::FinishedRotation(string new_name, string old_name, double open,
|
||||
double close, bool terminating)
|
||||
{
|
||||
// This function operates in a way that is backwards-compatible with
|
||||
// the old Bro log rotation scheme.
|
||||
|
||||
if ( ! postprocessor.size() )
|
||||
return true;
|
||||
|
||||
const char* const fmt = "%y-%m-%d_%H.%M.%S";
|
||||
|
||||
struct tm tm1;
|
||||
struct tm tm2;
|
||||
|
||||
time_t tt1 = (time_t)open;
|
||||
time_t tt2 = (time_t)close;
|
||||
|
||||
localtime_r(&tt1, &tm1);
|
||||
localtime_r(&tt2, &tm2);
|
||||
|
||||
char buf1[128];
|
||||
char buf2[128];
|
||||
|
||||
strftime(buf1, sizeof(buf1), fmt, &tm1);
|
||||
strftime(buf2, sizeof(buf2), fmt, &tm2);
|
||||
|
||||
string cmd = postprocessor;
|
||||
cmd += " " + fname;
|
||||
cmd += " " + old_name;
|
||||
cmd += " " + string(buf1);
|
||||
cmd += " " + string(buf2);
|
||||
cmd += " " + string(terminating ? "1" : "0");
|
||||
cmd += " &";
|
||||
|
||||
system(cmd.c_str());
|
||||
|
||||
return true;
|
||||
return log_mgr->FinishedRotation(this, new_name, old_name, open, close, terminating);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue