---
name: "Log::Log4perl::Appender::Buffer"
section: "3pm"
platform: "linux"
package: "perl-log-log4perl"
version: "1.58-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Log::Log4perl::Appender::Buffer"
---

# Log::Log4perl::Appender::Buffer(3pm)

Buffering Appender

## NAME

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

## 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

`"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

`"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

Copyright 2002-2026 by Mike Schilli \<m@perlmeister.com\> and Kevin Goess \<cpan@goess.org\>.

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