The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Venus::Log - Log Class

ABSTRACT

Log Class for Perl 5

SYNOPSIS

  package main;

  use Venus::Log;

  my $log = Venus::Log->new;

  # $log->trace(time, 'Something failed!');

  # "0000000000 Something failed!"

  # $log->error(time, 'Something failed!');

  # "0000000000 Something failed!"

DESCRIPTION

This package provides methods for logging information using various log levels. The default log level is trace. Acceptable log levels are trace, debug, info, warn, error, and fatal, and the set log level will handle events for its level and any preceding levels in the order specified.

ATTRIBUTES

This package has the following attributes:

handler

  handler(coderef $code) (coderef)

The handler attribute holds the callback that handles logging. The handler is passed the log level and the log messages.

Since 1.68

handler example 1
  # given: synopsis

  package main;

  my $handler = $log->handler;

  my $events = [];

  $handler = $log->handler(sub{shift; push @$events, [@_]});

level

  level(string $name) (string)

The level attribute holds the current log level. Valid log levels are trace, debug, info, warn, error and fatal, and will emit log messages in that order. Invalid log levels effectively disable logging.

Since 1.68

level example 1
  # given: synopsis

  package main;

  my $level = $log->level;

  # "trace"

  $level = $log->level('fatal');

  # "fatal"

separator

  separator(any $data) (any)

The separator attribute holds the value used to join multiple log message arguments.

Since 1.68

separator example 1
  # given: synopsis

  package main;

  my $separator = $log->separator;

  # ""

  $separator = $log->separator("\n");

  # "\n"

INHERITS

This package inherits behaviors from:

Venus::Kind::Utility

INTEGRATES

This package integrates behaviors from:

Venus::Role::Buildable

METHODS

This package provides the following methods:

debug

  debug(string @data) (Venus::Log)

The debug method logs debug information and returns the invocant.

Since 1.68

debug example 1
  # given: synopsis

  package main;

  # $log = $log->debug(time, 'Something failed!');

  # "0000000000 Something failed!"
debug example 2
  # given: synopsis

  package main;

  # $log->level('info');

  # $log = $log->debug(time, 'Something failed!');

  # noop

error

  error(string @data) (Venus::Log)

The error method logs error information and returns the invocant.

Since 1.68

error example 1
  # given: synopsis

  package main;

  # $log = $log->error(time, 'Something failed!');

  # "0000000000 Something failed!"
error example 2
  # given: synopsis

  package main;

  # $log->level('fatal');

  # $log = $log->error(time, 'Something failed!');

  # noop

fatal

  fatal(string @data) (Venus::Log)

The fatal method logs fatal information and returns the invocant.

Since 1.68

fatal example 1
  # given: synopsis

  package main;

  # $log = $log->fatal(time, 'Something failed!');

  # "0000000000 Something failed!"
fatal example 2
  # given: synopsis

  package main;

  # $log->level('unknown');

  # $log = $log->fatal(time, 'Something failed!');

  # noop

info

  info(string @data) (Venus::Log)

The info method logs info information and returns the invocant.

Since 1.68

info example 1
  # given: synopsis

  package main;

  # $log = $log->info(time, 'Something failed!');

  # "0000000000 Something failed!"
info example 2
  # given: synopsis

  package main;

  # $log->level('warn');

  # $log = $log->info(time, 'Something failed!');

  # noop

input

  input(string @data) (string)

The input method returns the arguments provided to the log level methods, to the "output", and can be overridden by subclasses.

Since 1.68

input example 1
  # given: synopsis

  package main;

  my @input = $log->input(1, 'Something failed!');

  # (1, 'Something failed!')

output

  output(string @data) (string)

The output method returns the arguments returned by the "input" method, to the log handler, and can be overridden by subclasses.

Since 1.68

output example 1
  # given: synopsis

  package main;

  my $output = $log->output(time, 'Something failed!');

  # "0000000000 Something failed!"

string

  string(any $data) (string)

The string method returns a stringified representation of any argument provided and is used by the "output" method.

Since 1.68

string example 1
  # given: synopsis

  package main;

  my $string = $log->string;

  # ""
string example 2
  # given: synopsis

  package main;

  my $string = $log->string('Something failed!');

  # "Something failed!"
string example 3
  # given: synopsis

  package main;

  my $string = $log->string([1,2,3]);

  # [1,2,3]
string example 4
  # given: synopsis

  package main;

  my $string = $log->string(bless({}));

  # "bless({}, 'main')"

trace

  trace(string @data) (Venus::Log)

The trace method logs trace information and returns the invocant.

Since 1.68

trace example 1
  # given: synopsis

  package main;

  # $log = $log->trace(time, 'Something failed!');

  # "0000000000 Something failed!"
trace example 2
  # given: synopsis

  package main;

  # $log->level('debug');

  # $log = $log->trace(time, 'Something failed!');

  # noop

warn

  warn(string @data) (Venus::Log)

The warn method logs warn information and returns the invocant.

Since 1.68

warn example 1
  # given: synopsis

  package main;

  # $log = $log->warn(time, 'Something failed!');

  # "0000000000 Something failed!"
warn example 2
  # given: synopsis

  package main;

  # $log->level('error');

  # $log = $log->warn(time, 'Something failed!');

  # noop

write

  write(string $level, any @data) (Venus::Log)

The write method invokes the log handler, i.e. "handler", and returns the invocant.

Since 1.68

write example 1
  # given: synopsis

  package main;

  # $log = $log->write('info', time, 'Something failed!');

  # bless(..., "Venus::Log")

AUTHORS

Awncorp, awncorp@cpan.org

LICENSE

Copyright (C) 2022, Awncorp, awncorp@cpan.org.

This program is free software, you can redistribute it and/or modify it under the terms of the Apache license version 2.0.