Help for directive roll_keep and roll_keep_for

1. The problem I’m having:

The directives roll_keep and roll_keep_for do not work. What have I done wrong?

As shown below:

$ ls -lh abc.example.com/
total 852M
-rw-r----- 1 caddy caddy 100M Sep 13 20:07 abc.example.com-2025-09-13T19-07-52.421.json
-rw-r----- 1 caddy caddy 100M Sep 15 20:23 abc.example.com-2025-09-15T19-23-03.557.json
-rw-r----- 1 caddy caddy 100M Sep 17 06:30 abc.example.com-2025-09-17T05-30-37.686.json
-rw-r----- 1 caddy caddy 100M Sep 18 07:46 abc.example.com-2025-09-18T06-46-38.846.json
-rw-r----- 1 caddy caddy 100M Sep 19 19:23 abc.example.com-2025-09-19T18-24-01.580.json
-rw-r----- 1 caddy caddy 100M Sep 25 19:50 abc.example.com-2025-09-25T18-50-05.122.json
-rw-r----- 1 caddy caddy 100M Sep 27 04:21 abc.example.com-2025-09-27T03-21-24.911.json
-rw-r----- 1 caddy caddy 100M Sep 29 02:43 abc.example.com-2025-09-29T01-43-26.027.json
-rw-r----- 1 caddy caddy 100M Sep 30 06:48 abc.example.com-2025-09-30T05-48-00.797.json
-rw-r----- 1 caddy caddy 100M Oct  1 11:15 abc.example.com-2025-10-01T10-16-11.051.json
-rw-r----- 1 caddy caddy 100M Oct  2 22:09 abc.example.com-2025-10-02T21-09-11.652.json
-rw-r----- 1 caddy caddy 100M Oct  4 06:20 abc.example.com-2025-10-04T05-20-57.792.json
-rw-r----- 1 caddy caddy 100M Oct  5 08:09 abc.example.com-2025-10-05T07-09-01.365.json
-rw-r----- 1 caddy caddy 100M Oct  6 19:02 abc.example.com-2025-10-06T18-02-46.594.json
-rw-r----- 1 caddy caddy 100M Oct  8 05:16 abc.example.com-2025-10-08T04-16-28.871.json
-rw-r----- 1 caddy caddy 100M Oct  9 06:49 abc.example.com-2025-10-09T05-49-27.252.json
-rw-r----- 1 caddy caddy 100M Oct 10 12:42 abc.example.com-2025-10-10T11-42-53.495.json
-rw-r----- 1 caddy caddy 100M Oct 11 20:58 abc.example.com-2025-10-11T19-58-38.210.json
-rw-r----- 1 caddy caddy 100M Oct 13 06:07 abc.example.com-2025-10-13T05-07-22.115.json
-rw-r----- 1 caddy caddy 100M Oct 14 07:02 abc.example.com-2025-10-14T06-02-50.523.json
-rw-r----- 1 caddy caddy 100M Oct 15 10:44 abc.example.com-2025-10-15T09-44-07.074.json
-rw-r----- 1 caddy caddy 100M Oct 17 05:39 abc.example.com-2025-10-17T04-39-06.954.json
-rw-r----- 1 caddy caddy 100M Oct 18 07:05 abc.example.com-2025-10-18T06-05-20.517.json
-rw-r----- 1 caddy caddy 100M Oct 19 23:33 abc.example.com-2025-10-19T22-33-08.943.json
-rw-r----- 1 caddy caddy 100M Oct 21 06:27 abc.example.com-2025-10-21T05-27-20.506.json
-rw-r----- 1 caddy caddy 100M Oct 22 08:10 abc.example.com-2025-10-22T07-11-05.400.json
-rw-r----- 1 caddy caddy 100M Oct 23 19:05 abc.example.com-2025-10-23T18-05-23.182.json
-rw-r----- 1 caddy caddy 100M Oct 25 06:03 abc.example.com-2025-10-25T05-03-31.468.json
-rw-r----- 1 caddy caddy 100M Oct 26 06:51 abc.example.com-2025-10-26T06-51-42.688.json
-rw-r----- 1 caddy caddy 100M Oct 27 17:41 abc.example.com-2025-10-27T17-41-41.479.json
-rw-r----- 1 caddy caddy 100M Oct 29 04:19 abc.example.com-2025-10-29T04-19-25.773.json
-rw-r----- 1 caddy caddy 100M Oct 30 06:48 abc.example.com-2025-10-30T06-48-12.720.json
-rw-r----- 1 caddy caddy 100M Oct 31 19:53 abc.example.com-2025-10-31T19-53-29.039.json
-rw-r----- 1 caddy caddy 100M Nov  2 06:38 abc.example.com-2025-11-02T06-38-10.103.json
-rw-r----- 1 caddy caddy 100M Nov  3 15:16 abc.example.com-2025-11-03T15-16-43.326.json
-rw-r----- 1 caddy caddy 100M Nov  4 22:42 abc.example.com-2025-11-04T22-42-37.045.json
-rw-r----- 1 caddy caddy 100M Nov  6 23:05 abc.example.com-2025-11-06T23-05-08.611.json
-rw-r----- 1 caddy caddy 100M Nov  8 06:18 abc.example.com-2025-11-08T06-18-30.757.json
-rw-r----- 1 caddy caddy 100M Nov  9 08:53 abc.example.com-2025-11-09T08-53-02.943.json
-rw-r----- 1 caddy caddy 100M Nov 10 19:09 abc.example.com-2025-11-10T19-09-35.303.json
-rw-r----- 1 caddy caddy 100M Nov 12 02:08 abc.example.com-2025-11-12T02-08-00.051.json
-rw-r----- 1 caddy caddy 100M Nov 17 01:20 abc.example.com-2025-11-17T01-20-14.015.json
-rw-r----- 1 caddy caddy 100M Nov 21 10:05 abc.example.com-2025-11-21T10-05-24.881.json
-rw-r----- 1 caddy caddy 100M Nov 23 07:06 abc.example.com-2025-11-23T07-06-08.632.json
-rw-r----- 1 caddy caddy 100M Nov 25 01:26 abc.example.com-2025-11-25T01-26-16.055.json
-rw-r----- 1 caddy caddy 100M Nov 26 15:19 abc.example.com-2025-11-26T15-19-16.571.json
-rw-r----- 1 caddy caddy  39M Nov 27 15:41 abc.example.com.json

2. Error messages and/or full log output:

$ journalctl -u caddy --no-pager | less +G
sh: journalctl: not found

3. Caddy version:

v2.10.2

4. How I installed and ran Caddy:

docker

a. System environment:

OS of the host that Docker runs on:

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm

b. Command:

caddy run --config /etc/caddy/Caddyfile --adapter caddyfile

c. Service/unit/compose file:

---
services:
  caddy:
    image: caddy:latest
    container_name: caddy
    hostname: pikachu-caddy
    extra_hosts:
    - "x11dpu-webui.example.com:127.0.0.1"
    - "pihole-pikachu.example.com:127.0.0.1"
    deploy:
      resources:
        limits:
          memory: 256M
    healthcheck:
      test:
      - "CMD"
      - "wget"
      - "--no-verbose"
      - "--quiet"
      - "--tries=1"
      - "--spider"
      - "--no-check-certificate"
      - "https://pihole-pikachu.example.com/admin/login"
    restart: unless-stopped
    user: "3012:3012"
    cap_add:
    - NET_ADMIN
    environment:
    - TZ=Europe/London
    # CPU core count
    - GOMAXPROCS=24
    ports:
    - "80:80"
    - "443:443"
    - "443:443/udp"
    volumes:
    - ./caddy:/etc/caddy
    - ./certs:/certs:ro
    - ./config:/config:rw
    - ./data:/data:rw
    - ./srv:/srv
    - /mnt/logs/caddy_pikachu/:/logs

d. My complete Caddy config:

{
	email example@example.com
	acme_ca https://acme-v02.api.letsencrypt.org/directory

	log {
		format json {
			time_format iso8601
		}
	}
}

(tls_example.com) {
	tls /certs/example.com/fullchain.cert.pem /certs/example.com/example.com.key.pem
}

(per_host_log) {
	log {
		hostnames {args[0]}
		output file /logs/{args[0]}/{args[0]}.json {
			mode 640
			roll_size 100MiB
			roll_keep_for 720h
		}
		format json {
			time_format iso8601
		}
	}
}

abc.example.com {
	import tls_example.com
	import per_host_log abc.example.com
	reverse_proxy http://10.45.0.65:6767
}

5. Links to relevant resources:

You don’t use journalctl if you use Caddy in Docker. That’s for when you run Caddy on the host as a systemd service.

The lib we used for log rolling lumberjack is abandoned, we’re switching to timberjack (a fork with new features). It’s been merged to Caddy’s mainline branch so you could build from source to try it if you want, it might fix it. I’m not certain though.

1 Like

@francislavoie

Thanks for your help.

Does it mean there is no way to get roll_keep and/or roll_keep_for works for v2.10.2? If so, which is the last working version? And is there any roadmap for which version will the feature return?

Thanks in advance.

It’s the first I hear of problems with roll_keep. I’m not equipped to debug that, and it wouldn’t be a good use of time anyway because the library is being replaced.

We don’t have a roadmap/schedule for releases, we’ll release when it’s ready. For the time being you can build from source (very easy with xcaddy) to try the new lib and see if it works for you. You could try testing the rolling separately with smaller numbers (e.g. keep for 5 minutes, roll every 100kb or something, then run a script to do lots of requests to see how it behaves)

1 Like