Appender::Buffer(3) User Contributed Perl Documentation Appender::Buffer(3)

# [NAME](#NAME)

Log::Log4perl::Appender::Buffer - Buffering Appender

# [SYNOPSIS](#SYNOPSIS)

```
    use Log::Log4perl qw(:easy);
    my $conf = qq(
    log4perl.category                  = DEBUG, Buffer
        # Regular Screen Appender
    log4perl.appender.Screen           = Log::Log4perl::Appender::Screen
    log4perl.appender.Screen.stdout    = 1
    log4perl.appender.Screen.layout    = PatternLayout
    log4perl.appender.Screen.layout.ConversionPattern = %d %p %c %m %n
        # Buffering appender, using the appender above as outlet
    log4perl.appender.Buffer               = Log::Log4perl::Appender::Buffer
    log4perl.appender.Buffer.appender      = Screen
    log4perl.appender.Buffer.trigger_level = ERROR
    );
    Log::Log4perl->init(\$conf);
    DEBUG("This message gets buffered.");
    INFO("This message gets buffered also.");
    # Time passes. Nothing happens. But then ...
    print "It's GO time!!!\n";
    ERROR("This message triggers a buffer flush.");
```

# [DESCRIPTION](#DESCRIPTION)

"Log::Log4perl::Appender::Buffer" takes these arguments:

"appender"

Specifies the name of the appender it buffers messages for. The appender specified must be defined somewhere in the configuration file, not necessarily before the definition of "Log::Log4perl::Appender::Buffer".

"max\_messages"

Specifies the maximum number of messages the appender will hold in its ring buffer. "max\_messages" is optional. By default, "Log::Log4perl::Appender::Buffer" will *not* limit the number of messages buffered. This might be undesirable in long-running processes accumulating lots of messages before a flush happens. If "max\_messages" is set to a numeric value, "Log::Log4perl::Appender::Buffer" will displace old messages in its buffer to make room if the buffer is full.

"trigger\_level"

If trigger\_level is set to one of Log4perl's levels (see Log::Log4perl::Level), a "trigger" function will be defined internally to flush the buffer if a message with a priority of $level or higher comes along. This is just a convenience function. Defining

```
    log4perl.appender.Buffer.trigger_level = ERROR
    
```

is equivalent to creating a trigger function like

```
    log4perl.appender.Buffer.trigger = sub {   \
        my($self, $params) = @_;               \
        return $params->{log4p_level} >=       \
               $Log::Log4perl::Level::ERROR; }
    
```

See the next section for defining generic trigger functions.

"trigger"

"trigger" holds a reference to a subroutine, which "Log::Log4perl::Appender::Buffer" will call on every incoming message with the same parameters as the appender's log() method:

```
        my($self, $params) = @_;
    
```

$params references a hash containing the message priority (key "l4p\_level"), the message category (key "l4p\_category") and the content of the message (key "message").

If the subroutine returns 1, it will trigger a flush of buffered messages.

Shortcut

# [DEVELOPMENT NOTES](#DEVELOPMENT_NOTES)

"Log::Log4perl::Appender::Buffer" is a *composite* appender. Unlike other appenders, it doesn't log any messages, it just passes them on to its attached sub-appender. For this reason, it doesn't need a layout (contrary to regular appenders). If it defines none, messages are passed on unaltered.

Custom filters are also applied to the composite appender only. They are *not* applied to the sub-appender. Same applies to appender thresholds. This behaviour might change in the future.

# [LICENSE](#LICENSE)

Copyright 2002-2026 by Mike Schilli &lt;m@perlmeister.com&gt; and Kevin Goess &lt;cpan@goess.org&gt;.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

2026-08-17 perl v5.44.0

---

Document: Log::Log4perl::Appender::Buffer(3pm) from perl-log-log4perl 1.58-r1 (Chainguard OS)
Source: https://github.com/mschilli/log4perl.git
