The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package POE::Component::Server::Twirc::LogAppender;
use warnings;
use strict;

use base qw/Log::Log4perl::Appender/;

sub new {
    my($class, @options) = @_;

    my $self = {
        name         => 'twirc-logger',
        irc_channel  => '&twirc-log',
        history      => [],
        history_size => 50,
        @options,
    };

    for ( qw/ircd irc_botname irc_channel/ ) {
        die "$_ required" unless defined $self->{$_};
    }

    bless $self, $class;
}

sub log {
    my($self, %params) = @_;

    $self->{ircd}->yield(daemon_cmd_privmsg =>
        $self->{irc_botname}, $self->{irc_channel}, $params{message});

    push @{$self->{history}}, \%params;
    shift @{$self->{history}} while @{$self->{history}} > $self->{history_size};
}

sub dump_history {
    my $self = shift;

    $self->{ircd}->yield(daemon_cmd_privmsg =>
            $self->{irc_botname}, $self->{irc_channel}, $_->{message})
        for @{$self->{history}};
}

1;