119 stable releases

1.228.0 Feb 12, 2024
1.222.0 Dec 8, 2023
1.216.0 Sep 3, 2023
1.214.0 Jun 14, 2023
0.0.0 Mar 25, 2021

#52 in Debugging

Download history 35/week @ 2023-11-02 116/week @ 2023-11-09 3/week @ 2023-11-16 229/week @ 2023-11-23 127/week @ 2023-11-30 289/week @ 2023-12-07 121/week @ 2023-12-14 234/week @ 2023-12-21 117/week @ 2023-12-28 212/week @ 2024-01-18 153/week @ 2024-01-25 122/week @ 2024-02-01 36/week @ 2024-02-08 901/week @ 2024-02-15

1,215 downloads per month

Apache-2.0 and LGPL-2.0-or-later

195 lines


Do you ever have a terminal watching logs or recompiling on save and you aren't sure if the most recent messages are from the change you just made, or 10 minutes ago? watchlog will help you but adding a message at the bottom of your terminal that haven't produced output recently. After a short period of no output watchlog will start displaying the time since last output below the command.

HTTP/1.1 GET /api/books/1 500
HTTP/1.1 GET /api/books/2 500
HTTP/1.1 GET /api/books/1 500
HTTP/1.1 GET /api/books/1 200
Last output 48s ago.

When the command produces more output it will look like normal if it hasn't been too long, however if it has been a while watchlog will inject a timestamp so that the logs are grouped by when they occurred when you scroll up.

If you still don't get it I have a longer explanation of how I use watchlog on my blog.


A demo at 6x speed.

demo of watchlog


Simply put | wl after your command.

$ python -m http.server | wl


watchlog can be configured with watchlog/config.scfg. This file will be read from all of the appropriate places for your platform. For example on a Linux system it will be looked for in ~/.config/watchlog and /etc/xdg/watchlog (or whatever you have configured in $XDG_CONFIG_DIRS). If multiple files are found they will be merged according to precedence. If a value is not set in any config file a builtin default will be used.

The following options are supported, the first example for each option shows the default value.


delay (Duration)

Enable watchlog when there is no output for this long.

delay: 3s

permanent-delay (Option<Duration>)

Insert a permanent timestamp into the output after a delay of at least this long.

Note that a timestamp is never inserted after pauses which occur mid-line.

permanent-delay: 10s
permanent-delay: never



Durations can be specified in a simple form with units.

delay: 10s
permanent-delay: 1h 2m 30s


Optional durations can be set to never for an infinite duration or a Duration value.

permanent-delay: never



$ cargo install watchlog


watchlog is available in nixpkgs

Or you can build from source:

$ nix-env -i -f https://gitlab.com/kevincox/watchlog/-/archive/v1/watchlog-v1.tar.bz2 -A watchlog

Questions, Comments or Feedback

I am happy to answer any questions, discuss features, bugs or possible contributions. Just open an issue (even if you just want to say hello).


~143K SLoC