.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Net::CLI::Interact::Logger 3pm" .TH Net::CLI::Interact::Logger 3pm "2014-09-29" "perl v5.20.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Net::CLI::Interact::Logger \- Per\-instance multi\-target logging, with categories .SH "VERSION" .IX Header "VERSION" version 2.142720 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& $logger\->log($category, $level, @message); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module implements a generic logging service, based on Log::Dispatch but with additional options and configuration. Log messages coming from your application are categorized, and each category can be enabled/disabled separately and have its own log level (i.e. \f(CW\*(C`emergency\*(C'\fR .. \f(CW\*(C`debug\*(C'\fR). High resolution timestamps can be added to log messages. .SH "DEFAULT CONFIGURATION" .IX Header "DEFAULT CONFIGURATION" Being based on Log::Dispatch::Config, this logger can have multiple targets, each configured for independent level thresholds. The overall default configuration is to print log messages to the screen (console), with a minimum level of \f(CW\*(C`debug\*(C'\fR. Each category (see below) has its own log level as well. .PP Note that categories, as discussed below, are arbitrary so if a category is not explicitly enabled or disabled, it is assumed to be \fBdisabled\fR. If you wish to invent a new category for your application, simply think of the name and begin to use it, with a \f(CW$level\fR and \f(CW@message\fR as above in the \&\s-1SYNOPSIS.\s0 .SH "INTERFACE" .IX Header "INTERFACE" .ie n .SS "log( $category, $level, @message )" .el .SS "log( \f(CW$category\fP, \f(CW$level\fP, \f(CW@message\fP )" .IX Subsection "log( $category, $level, @message )" The combination of category and level determine whether the the log messages are emitted to any of the log destinations. Destinations are set using the \&\f(CW\*(C`log_config\*(C'\fR method, and categories are configured using the \f(CW\*(C`log_flags\*(C'\fR method. .PP The \f(CW@message\fR list will be joined by a space character, and a newline appended if the last message doesn't contain one itself. Messages are prepended with the first character of their \f(CW$category\fR, and then indented proportionally to their \f(CW$level\fR. .SS "log_config( \e%config )" .IX Subsection "log_config( %config )" A \f(CW\*(C`Log::Dispatch::Config\*(C'\fR configuration (hash ref), meaning multiple log targets may be specified with different minimum level thresholds. There is a default configuration which emits messages to your screen (console) with no minimum threshold: .PP .Vb 7 \& { \& dispatchers => [\*(Aqscreen\*(Aq], \& screen => { \& class => \*(AqLog::Dispatch::Screen\*(Aq, \& min_level => \*(Aqdebug\*(Aq, \& }, \& }; .Ve .SS "log_flags( \e@categories | \e%category_level_map )" .IX Subsection "log_flags( @categories | %category_level_map )" The user is expected to specify which log categories they are interested in, and at what levels. If a category is used in the application for logging but not specified, then it is deemed \fBdisabled\fR. Hence, even though the default destination log level is \f(CW\*(C`debug\*(C'\fR, no messages are emitted until a category is enabled. .PP In the array reference form, the list should contain category names, and they will all be mapped to the \f(CW\*(C`error\*(C'\fR level: .PP .Vb 6 \& $logger\->log_flags([qw/ \& network \& disk \& io \& cpu \& /]); .Ve .PP In the hash reference form, the keys should be category names and the values log levels from the list below (ordered such that each level \*(L"includes\*(R" the levels \fIabove\fR): .PP .Vb 8 \& emergency \& alert \& critical \& error \& warning \& notice \& info \& debug .Ve .PP For example: .PP .Vb 6 \& $logger\->log_flags({ \& network => \*(Aqinfo\*(Aq, \& disk => \*(Aqdebug\*(Aq, \& io => \*(Aqcritical\*(Aq, \& cpu => \*(Aqdebug\*(Aq, \& }); .Ve .PP Messages at or above the specified level will be passed on to the \&\f(CW\*(C`Log::Dispatch\*(C'\fR target, which may then specify an overriding threshold. .ie n .SS """ Net::CLI::Interact\-""\fIdefault_log_categories()\fP >>" .el .SS "\f(CW Net::CLI::Interact\-\fP\fIdefault_log_categories()\fP >>" .IX Subsection " Net::CLI::Interact-default_log_categories() >>" Not a part of this class, but the only way to retrieve a list of the current log categories used in the Net::CLI::Interact distribution source. Does not take into account any log categories added by the user. .ie n .SS "log_stamp( $boolean )" .el .SS "log_stamp( \f(CW$boolean\fP )" .IX Subsection "log_stamp( $boolean )" Enable (the default) or disable the display of high resolution interval timestamps with each log message. .ie n .SS "log_category( $boolean )" .el .SS "log_category( \f(CW$boolean\fP )" .IX Subsection "log_category( $boolean )" Enable (the default) or disable the display of the first letters of the category name with each log message. .ie n .SS "log_start( [$seconds, $microseconds] )" .el .SS "log_start( [$seconds, \f(CW$microseconds\fP] )" .IX Subsection "log_start( [$seconds, $microseconds] )" Time of the start for generating a time interval when logging stamps. Defaults to the result of \f(CW\*(C`Time::HiRes::gettimeofday\*(C'\fR at the point the module is loaded, in list context. .ie n .SS "would_log( $category, $level )" .el .SS "would_log( \f(CW$category\fP, \f(CW$level\fP )" .IX Subsection "would_log( $category, $level )" Returns True if, according to the current \f(CW\*(C`log_flags\*(C'\fR, the given \f(CW$category\fR is enabled at or above the threshold of \f(CW$level\fR, otherwise returns False. Note that the \f(CW\*(C`Log::Dispatch\*(C'\fR targets maintain their own thresholds as well. .SH "AUTHOR" .IX Header "AUTHOR" Oliver Gorwits .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2014 by Oliver Gorwits. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.