From 249adc1c872ae46e640cfb7c330e332229d8d32a Mon Sep 17 00:00:00 2001
From: Francis Lavoie <lavofr@gmail.com>
Date: Tue, 4 Jan 2022 14:11:27 -0500
Subject: [PATCH] logging: Support turning off roll compression via Caddyfile
 (#4505)

---
 .../integration/caddyfile_adapt/log_roll_days.txt     |  2 ++
 modules/logging/filewriter.go                         | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/caddytest/integration/caddyfile_adapt/log_roll_days.txt b/caddytest/integration/caddyfile_adapt/log_roll_days.txt
index 2d146f9c8..5762c92b9 100644
--- a/caddytest/integration/caddyfile_adapt/log_roll_days.txt
+++ b/caddytest/integration/caddyfile_adapt/log_roll_days.txt
@@ -3,6 +3,7 @@
 log {
 	output file /var/log/access.log {
 		roll_size 1gb
+		roll_uncompressed
 		roll_keep 5
 		roll_keep_for 90d
 	}
@@ -20,6 +21,7 @@ log {
 				"writer": {
 					"filename": "/var/log/access.log",
 					"output": "file",
+					"roll_gzip": false,
 					"roll_keep": 5,
 					"roll_keep_days": 90,
 					"roll_size_mb": 954
diff --git a/modules/logging/filewriter.go b/modules/logging/filewriter.go
index 376deeb2e..7333fb20e 100644
--- a/modules/logging/filewriter.go
+++ b/modules/logging/filewriter.go
@@ -134,6 +134,7 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) {
 //     file <filename> {
 //         roll_disabled
 //         roll_size     <size>
+//         roll_uncompressed
 //         roll_keep     <num>
 //         roll_keep_for <days>
 //     }
@@ -141,6 +142,9 @@ func (fw FileWriter) OpenWriter() (io.WriteCloser, error) {
 // The roll_size value has megabyte resolution.
 // Fractional values are rounded up to the next whole megabyte (MiB).
 //
+// By default, compression is enabled, but can be turned off by setting
+// the roll_uncompressed option.
+//
 // The roll_keep_for duration has day resolution.
 // Fractional values are rounded up to the next whole number of days.
 //
@@ -177,6 +181,13 @@ func (fw *FileWriter) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 				}
 				fw.RollSizeMB = int(math.Ceil(float64(size) / humanize.MiByte))
 
+			case "roll_uncompressed":
+				var f bool
+				fw.RollCompress = &f
+				if d.NextArg() {
+					return d.ArgErr()
+				}
+
 			case "roll_keep":
 				var keepStr string
 				if !d.AllArgs(&keepStr) {