2 /**************************************************************************
3 ** (c) Copyright 2002, Andromeda Technology & Automation
4 ** This is free software; you can redistribute it and/or modify it under the
5 ** terms of the GNU General Public License, see the file COPYING.
6 ***************************************************************************
7 ** MODULE INFORMATION *
8 ***********************
9 ** FILE NAME : error_cooker.cpp
11 ** VERSION NUMBER : $Revision: 1.3 $
13 ** DESCRIPTION : Cooks Apache http daemon error log lines
18 ***************************************************************************
19 ** ADMINISTRATIVE INFORMATION *
20 ********************************
21 ** ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
22 ** CREATION DATE : Aug 11, 2003
23 ** LAST UPDATE : Aug 11, 2003
25 **************************************************************************/
27 /*****************************
28 $Log: error_cooker.cpp,v $
29 Revision 1.3 2007-12-10 16:13:16 arjen
30 Accept [info] as a valid httpd error line.
32 Revision 1.2 2003/12/22 10:22:22 arjen
33 Accept a wider range of input patterns
35 Revision 1.1 2003/08/11 16:56:16 arjen
36 Different kinds of log files are parsed by a collection of objects
37 of different classes, derived from the base class line_cooker
38 Depending on the message content or the message_type element in
39 XML, one of these objects is selected.
41 Logrunner is integrated with gcm_input. Although its functionality
42 is still limited, a connection between logrunner and gcm_input
45 *****************************/
47 /* static const char *RCSID = "$Id: error_cooker.cpp,v 1.3 2007-12-10 16:13:16 arjen Exp $"; */
51 #include "error_cooker.h"
53 static const String unix_date_re("[[:alpha:]]{3} [[:alpha:]]{3} [ 0123][0-9] [0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)? [0-9]{4}");
54 static const regex re_errorlog("^\\[" + unix_date_re + "\\] \\[.*(error|notice|warn|info|debug)\\] .+");
56 bool error_cooker::check_pattern(String logline)
58 return logline == re_errorlog;
61 bool error_cooker::cook_this(String logline, UTC arrival)
63 if (check_pattern(logline))
65 String datestring = logline(regex("\\[.+\\]"));
70 date log_date = datestring;
71 hour log_time = datestring;
73 log_date = datestring;
74 log_time = datestring;
76 ts = UTC(log_date, log_time);