DateFormat(3)
π DateFormat(3) β bestie edition
okay so this is a page from the User Contributed Perl Documentation corner of the universe, and it's about Log::Log4perl::DateFormat, no cap. sit down, grab a strawberry π, we're formatting timestamps.
β¨ NAME β¨
Log::Log4perl::DateFormat β the Log4perl advanced date formatter helper class. that's it, that's the vibe. π
β¨ SYNOPSIS β¨
so there's like three ways to use this thing and honestly all of them eat:
# Either in a log4j.conf file ...
log4perl.appender.Logfile.layout = \
Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern = %d{MM/dd HH:mm} %m
# ... or via the PatternLayout class ...
use Log::Log4perl::Layout::PatternLayout;
my $layout = Log::Log4perl::Layout::PatternLayout->new(
"%d{HH:mm:ss,SSS} %m");
# ... or even directly with this helper class:
use Log::Log4perl::DateFormat;
my $format = Log::Log4perl::DateFormat->new("HH:mm:ss,SSS");
my $time = time();
print $format->format($time), "\n";
# => "17:02:39,000"
like, pick your main character moment π
β¨ DESCRIPTION β¨
Log::Log4perl::DateFormat is a helper class for the advanced date formatting functions inside Log::Log4perl::Layout::PatternLayout. it mostly adheres to the log4j SimpleDateFormat spec, which lives over here:
http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
and it supports these placeholders β memorize them, iykyk:
Symbol Meaning Presentation Example
------ ------- ------------ -------
G era designator (Text) AD
e epoch seconds (Number) 1315011604
y year (Number) 1996
M month in year (Text & Number) July & 07
d day in month (Number) 10
h hour in am/pm (1~12) (Number) 12
H hour in day (0~23) (Number) 0
m minute in hour (Number) 30
s second in minute (Number) 55
S millisecond (Number) 978
E day in week (Text) Tuesday
D day in year (Number) 189
F day of week in month (Number) 2 (2nd Wed in July)
w week in year (Number) 27
W week in month (Number) 2
a am/pm marker (Text) PM
k hour in day (1~24) (Number) 24
K hour in am/pm (0~11) (Number) 0
z time zone (Text) Pacific Standard Time
Z RFC 822 time zone (Text) -0800
' escape for text (Delimiter)
'' single quote (Literal) '
π¦ Presentation explanation π¦
- (Text): 4 or more pattern letters β use the full form; < 4 β use the short or abbreviated form if one exists.
- (Number): the minimum number of digits. shorter numbers are zero-padded to this amount. year is handled specially β that is, if the count of
'y'is 2, the year will be truncated to 2 digits. - (Text & Number): 3 or over β use text, otherwise use number.
so like, for example, if you wanna format the current Unix time in MM/dd HH:mm format, literally all you have to do is specify it in the %d{...} section of the PatternLayout in a Log4perl configuration file:
# log4j.conf
# ...
log4perl.appender.Logfile.layout = \
Log::Log4perl::Layout::PatternLayout
log4perl.appender.Logfile.layout.ConversionPattern = %d{MM/dd HH:mm} %m
same energy for Perl code defining a PatternLayout for Log4perl:
use Log::Log4perl::Layout::PatternLayout;
my $layout = Log::Log4perl::Layout::PatternLayout->new(
"%d{MM/dd HH:mm} %m");
or, going lower level, you can use the class directly:
use Log::Log4perl::DateFormat;
my $format = Log::Log4perl::DateFormat->new("MM/dd HH:mm");
my $time = time();
print $format->format($time), "\n";
now listen π β the new() method is expensive, because it parses the format strings and sets up all kinds of structures behind the scenes. but followup calls to format() are fast, because DateFormat will just call localtime() and sprintf() once to return the formatted date/time string. so the move is: initialize the formatter once, then reuse it over and over again to display all kinds of time values. periodt. π
also, for your convenience, these predefined formats are available, just as outlined in the log4j spec:
Format Equivalent Example
ABSOLUTE "HH:mm:ss,SSS" "15:49:37,459"
DATE "dd MMM yyyy HH:mm:ss,SSS" "06 Nov 1994 15:49:37,459"
ISO8601 "yyyy-MM-dd HH:mm:ss,SSS" "1999-11-27 15:49:37,459"
APACHE "[EEE MMM dd HH:mm:ss yyyy]" "[Wed Mar 16 15:49:37 2005]"
so instead of passing
Log::Log4perl::DateFormat->new("HH:mm:ss,SSS");
you could just as well say
Log::Log4perl::DateFormat->new("ABSOLUTE");
and get the same result later on. slay β¨
π Known Shortcomings π
okay so be aware, these placeholders are currently not recognized β unless someone (and that could literally be you :) implements them:
F day of week in month
w week in year
W week in month
k hour in day
K hour in am/pm
z timezone (but we got 'Z' for the numeric time zone value)
also Log::Log4perl::DateFormat just knows about English week and month names. internationalization support has to be added. that's the tea. β
π Millisecond Times π
more granular timestamps down to the millisecond are also supported β just provide the millsecond count as a second argument:
# Advanced time, resultion in milliseconds
use Time::HiRes;
my ($secs, $msecs) = Time::HiRes::gettimeofday();
print $format->format($secs, $msecs), "\n";
# => "17:02:39,959"
(yes, "resulion" β it says resultion in the comment and we're keeping it, character for character, because that's iconic in its own way π)
π LICENSE π
Copyright 2002-2016 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.
πΈ AUTHOR πΈ
please contribute patches to the project on Github:
http://github.com/mschilli/log4perl
send bug reports or requests for enhancements to the authors via our
MAILING LIST (questions, bug reports, suggestions/patches): log4perl-devel@lists.sourceforge.net
Authors (please contact them via the list above, not directly): Mike Schilli <m@perlmeister.com>, Kevin Goess <cpan@goess.org>
Contributors (in alphabetical order): Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy Grundman, Paul Harrington, Alexander Hartmaier David Hull, Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, Lars Thegler, David Viner, Mac Yang.
ok that's the whole page bestie, go format some timestamps and be the main character of your log files π«Ά
and a lil sign-off for the footer tea: this was perl v5.42.0, dated 2022-10-22, filed under DateFormat(3) β mwah π
π¦ where this page comes from
- opensuse-leap 16.0: perl-Log-Log4perl 1.57-160000.2.2 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms