---
name: "Log::Any::Adapter::TAP"
section: "3pm"
platform: "linux"
package: "liblog-any-adapter-tap-perl"
version: "0.3.3-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Log::Any::Adapter::TAP"
---

# Log::Any::Adapter::TAP(3pm)

Logging adapter suitable for use in TAP testcases

## NAME

Log::Any::Adapter::TAP - Logging adapter suitable for use in TAP testcases

## VERSION

version 0.003003

## DESCRIPTION

When running testcases, you probably want to see some of your logging output.  One sensible approach is to have all `"warn"` and more serious messages emitted as `"diag"` output on STDERR, and less serious messages emitted as `"note"` comments on STDOUT.

So, thats what this logging adapter does.  Simply say

```
  use Log::Any::Adapter 'TAP';
```

at the start of your testcase, and now you have your logging output as part of your TAP stream.

By default, `"debug"` and `"trace"` are suppressed, but you can enable them with "TAP\_LOG\_FILTER" or the "filter" attribute.  See below.

## ENVIRONMENT

### TAP\_LOG\_FILTER

Specify the default filter value.  See attribute "filter" for details.

You may also specify defaults per-category, using this syntax:

```
  $default_level,$package_1=$level,...,$package_n=$level
```

So, for example:

```
  TAP_LOG_FILTER=trace,MyPackage=none,NoisyPackage=warn prove -lv
```

### TAP\_LOG\_ORIGIN

Set this variable to 1 to show which category the message came from, or 2 to see the file and line number it came from, or 3 to see both.

### TAP\_LOG\_SHOW\_USAGE

Defaults to true, which prints a TAP comment briefing the user about these environment variables when Log::Any::Adapter::TAP is first loaded.

Set TAP\_LOG\_SHOW\_USAGE=0 to suppress this message.

## ATTRIBUTES

### filter

```
  use Log::Any::Adapter 'TAP', filter => 'info';
  use Log::Any::Adapter 'TAP', filter => 'debug+3';
```

Messages with a log level equal to or less than the filter are suppressed.

Defaults to "TAP\_LOG\_FILTER", or `"debug"` which suppresses `"debug"` and `"trace"` messages.

Filter may be:

- •

  Any of the log level names or level aliases defined in Log::Any.

- •

  `"none"` or `"undef"`, to filter nothing (print all log levels).

- •

  A value of `"all"`, to filter everything (print nothing).

The filter level may end with a `"+N"` or `"-N"` indicating an offset from the named level.  The numeric values increase with importance of the message, so `"debug-1"` is equivalent to `"trace"` and `"debug+1"` is equivalent to `"info"`. This differs from syslog, where increasing numbers are less important. (why did they choose that??)

### dumper (DEPRECATED, unusable in Log::Any \>= 0.9)

```
  use Log::Any::Adapter 'TAP', dumper => sub { my $val=shift; ... };
```

This feature lets you use a custom dumper in the printf-style logging functions.  However, these are no longer handled by the adapter in new versions of Log::Any, so you need to use a custom Proxy class in your log-producing module.

## METHODS

### new

See "new" in Log::Any::Adapter::Base.  Accepts the above attributes.

### write\_msg

```
  $self->write_msg( $level_name, $message_string )
```

This is an internal method which all the other logging methods call.  You can override it if you want to create a derived logger that handles line wrapping differently, or write to different file handles.

### default\_dumper

```
  $dumper= $class->default_dumper;
  $string = $dumper->( $perl_data );
```

Default value for the 'dumper' attribute.

This returns a coderef which can dump a value in "some human readable format". Currently it uses Data::Dumper with a max depth of 4. Do not depend on this default; it is only for human consumption, and might change to a more friendly format in the future.

## LOGGING METHODS

This module has all the standard logging methods from "LOG LEVELS" in Log::Any.

Note that the regular logging methods are only specified to take a single string. This module in the past supported passing objects as additional parameters, and having them stringified with a custom dumper, caatching exceptions thrown during stringification.  With the new Log::Any design, these things are decided in the producing module, so these features are no longer possible.

If this module does receive multiple arguments or have its printf-formatting methods called, it does the following:

For regular logging functions (i.e. `"warn"`, `"info"`) the arguments are stringified and concatenated.  Errors during stringify or printing are not caught.

For printf-like logging functions (i.e. `"warnf"`, `"infof"`) reference arguments are passed to `"$self->dumper"` before passing them to sprintf.  Errors are not caught here either.

For any log level below `"info"`, errors ARE caught with an `"eval"` and printed as a warning. This is to prevent sloppy debugging code from ever crashing a production system. Also, references are passed to `"$self->dumper"` even for the regular methods.

## AUTHOR

Michael Conrad \<mike@nrdvana.net\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Michael Conrad.

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