The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::YG::Apache::Error;
use strict;
use warnings;

# [Sat Oct 06 17:34:17 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
# [Sat Oct 06 17:36:10 2012] [error] [client 123.220.65.13] File does not exist: /var/www/html/favicon.ico
our $regexp = qr/^
  \[([^\]]+)\]\ +\[([^\]]+)\]\ +
  (?:\[client\ ([^\]]+)\]\ +)?
  (.+)
$/x;

sub parse {
    my $line = shift;

    $line =~ m!$regexp! or warn "failed to parse line: '$line'\n";

    return [
        $1 || '', $2 ||'',
        $3 || '',
        $4 || '',
    ];
}

sub labels {
    return [qw/
        Date
        Log_Level
        Client
        Message
    /];
}

1;

__END__

=head1 NAME

App::YG::Apache::Error - Apache error log parser


=head1 SYNOPSIS

    use App::YG::Apache::Error;
    App::YG::Apache::Error::parse($log);


=head1 METHOD

=over

=item parse($log_line)

=item labels

=back


=head1 AUTHOR

Dai Okabayashi E<lt>bayashi@cpan.orgE<gt>


=head1 LICENSE

This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.

=cut