---
name: "Log::Log4perl::Util::TimeTracker"
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::Util::TimeTracker"
---

# Log::Log4perl::Util::TimeTracker(3pm)

Track time elapsed

## NAME

Log::Log4perl::Util::TimeTracker - Track time elapsed

## SYNOPSIS

```
  use Log::Log4perl::Util::TimeTracker;
  my $timer = Log::Log4perl::Util::TimeTracker->new();
    # equivalent to Time::HiRes::gettimeofday(), regardless
    # if Time::HiRes is present or not.
  my($seconds, $microseconds) = $timer->gettimeofday();
    # reset internal timer
  $timer->reset();
    # return milliseconds since last reset
  $msecs = $timer->milliseconds();
    # return milliseconds since last call
  $msecs = $timer->delta_milliseconds();
```

## DESCRIPTION

This utility module helps tracking time elapsed for PatternLayout's date and time placeholders. Its accuracy depends on the availability of the Time::HiRes module. If it's available, its granularity is milliseconds, if not, seconds.

The most common use of this module is calling the **gettimeofday()**  method:

```
  my($seconds, $microseconds) = $timer->gettimeofday();
```

It returns seconds and microseconds of the current epoch time. If  Time::HiRes is installed, it will simply defer to its **gettimeofday()** function, if it's missing, **time()** will be called instead and `$microseconds` will always be 0.

To measure time elapsed in milliseconds, use the **reset()** method to  reset the timer to the current time, followed by one or more calls to the **milliseconds()** method:

```
    # reset internal timer
  $timer->reset();
    # return milliseconds since last reset
  $msecs = $timer->milliseconds();
```

On top of the time span between the last reset and the current time,  the module keeps track of the time between calls to **delta\_milliseconds()**:

```
  $msecs = $timer->delta_milliseconds();
```

On the first call, this will return the number of milliseconds since the last **reset()**, on subsequent calls, it will return the time elapsed in milliseconds since the last call to **delta\_milliseconds()** instead. Note that **reset()** also resets the time of the last call.

The internal timer of this module gets its time input from the POSIX **time()**  function, or, if the Time::HiRes module is available, from its  **gettimeofday()** function. To figure out which one it is, use

```
    if( $timer->hires_available() ) {
        print "Hooray, we get real milliseconds!\n";
    } else {
        print "Milliseconds are just bogus\n";
    }
```

For testing purposes, a different time source can be provided, so test suites can simulate time passing by without actually having to wait:

```
  my $start_time = time();
  my $timer = Log::Log4perl::Util::TimeTracker->new(
          time_function => sub {
              return $start_time++;
          },
  );
```

Every call to `$timer`-\>**epoch()** will then return a time value that is one second ahead of the value returned on the previous call. This also means that every call to **delta\_milliseconds()** will return a value that exceeds the value returned on the previous call by 1000.

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