GNU bug report logs -
#69399
[PATCH] services: nginx: Make log formats configurable.
Previous Next
Reported by: Leo Nikkilä <hello <at> lnikki.la>
Date: Mon, 26 Feb 2024 01:16:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Sat, 11 Jan 2025 23:18:30 +0100
with message-id <87r059m1u1.fsf <at> gnu.org>
and subject line Re: [bug#69399] [PATCH v2] services: nginx: Make log formats configurable.
has caused the debbugs.gnu.org bug report #69399,
regarding [PATCH] services: nginx: Make log formats configurable.
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
69399: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69399
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Currently it's not possible to configure the log format through Guix,
since additional log formats must be declared before they're used, and
`extra-content' is always added at the bottom of the `http' block.
This patch aims to make these log formats configurable.
* gnu/services/web.scm (<nginx-log-format-configuration>): New record.
(<nginx-configuration>)[log-format, log-formats]: New fields.
(assert-valid-log-format-escape): New procedure.
(emit-nginx-log-format-config): New procedure.
(default-nginx-config): Make log formats configurable.
* doc/guix.texi (Web Services): Document it.
---
doc/guix.texi | 40 +++++++++++++++++++++++++++++++++++++---
gnu/services/web.scm | 41 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 76 insertions(+), 5 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 671cdab6f8..71a00740bc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31684,6 +31693,31 @@ valued G-expression.
@end table
@end deftp
+@deftp {Data Type} nginx-log-format-configuration
+Data type representing the configuration of a custom Nginx log format.
+This type has the following parameters:
+
+@table @asis
+@item @code{name} (type: symbol)
+The name of the log format as a symbol.
+
+@item @code{escape} (default: @code{'default}) (type: symbol)
+The mode used to escape values of variables in the format. The
+supported values are:
+
+@itemize
+@item @code{'default}, to escape all characters outside of the ASCII
+ printable range.
+@item @code{'json}, to escape all characters invalid in JSON strings.
+@item @code{'none}, to disable escaping.
+@end itemize
+
+@item @code{format} (type: string)
+The format as accepted by the @code{log_format} directive.
+
+@end table
+@end deftp
+
@anchor{nginx-server-configuration}
@deftp {Data Type} nginx-server-configuration
Data type representing the configuration of an nginx server block.
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 406117c457..5f895bab6d 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -17,6 +17,7 @@
;;; Copyright © 2022 Simen Endsjø <simendsjo <at> gmail.com>
;;; Copyright © 2023 Bruno Victal <mirai <at> makinata.eu>
;;; Copyright © 2023 Miguel Ángel Moreno <mail <at> migalmoreno.com>
+;;; Copyright © 2024 Leo Nikkilä <hello <at> lnikki.la>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -103,6 +104,8 @@ (define-module (gnu services web)
nginx-configuration-nginx
nginx-configuration-shepherd-requirement
nginx-configuration-log-directory
+ nginx-configuration-log-format
+ nginx-configuration-log-formats
nginx-configuration-log-level
nginx-configuration-run-directory
nginx-configuration-server-blocks
@@ -114,6 +117,12 @@ (define-module (gnu services web)
nginx-configuration-extra-content
nginx-configuration-file
+ nginx-log-format-configuration
+ nginx-log-format-configuration?
+ nginx-log-format-configuration-name
+ nginx-log-format-configuration-escape
+ nginx-log-format-configuration-format
+
nginx-server-configuration
nginx-server-configuration?
nginx-server-configuration-listen
@@ -522,6 +531,23 @@ (define httpd-service-type
(httpd-configuration))
(description "Run the Apache httpd Web server.")))
+(define-record-type* <nginx-log-format-configuration>
+ nginx-log-format-configuration make-nginx-log-format-configuration
+ nginx-log-format-configuration?
+ (name nginx-log-format-configuration-name)
+ (escape nginx-log-format-configuration-escape
+ (sanitize assert-valid-log-format-escape)
+ (default 'default))
+ (format nginx-log-format-configuration-format))
+
+(define (assert-valid-log-format-escape escape)
+ "Ensure @var{escape} is one of @code{'default}, @code{'json}, or
+@code{'none}."
+ (unless (memq escape '(default json none))
+ (raise
+ (formatted-message (G_ "unknown log format escape '~a'~%") escape)))
+ escape)
+
(define-record-type* <nginx-server-configuration>
nginx-server-configuration make-nginx-server-configuration
nginx-server-configuration?
@@ -580,6 +606,10 @@ (define-record-type* <nginx-configuration>
(log-level nginx-configuration-log-level
(sanitize assert-valid-log-level)
(default 'error))
+ (log-format nginx-configuration-log-format ;symbol
+ (default 'combined))
+ (log-formats nginx-configuration-log-formats ;list of <nginx-log-format-configuration>
+ (default '()))
(run-directory nginx-configuration-run-directory ;string
(default "/var/run/nginx"))
(server-blocks nginx-configuration-server-blocks
@@ -635,6 +665,12 @@ (define emit-global-directive
((key . value)
(format #f "~a ~a;~%" key value))))
+(define emit-nginx-log-format-config
+ (match-lambda
+ (($ <nginx-log-format-configuration> name escape format)
+ (list " log_format " (symbol->string name) " escape="
+ (symbol->string escape) " " format ";\n"))))
+
(define emit-nginx-location-config
(match-lambda
(($ <nginx-location-configuration> uri body)
@@ -718,7 +754,7 @@ (define (default-nginx-config config)
(match-record config
<nginx-configuration>
(nginx log-directory run-directory
- log-level
+ log-level log-format log-formats
server-blocks upstream-blocks
server-names-hash-bucket-size
server-names-hash-bucket-max-size
@@ -740,7 +776,8 @@ (define (default-nginx-config config)
" fastcgi_temp_path " run-directory "/fastcgi_temp;\n"
" uwsgi_temp_path " run-directory "/uwsgi_temp;\n"
" scgi_temp_path " run-directory "/scgi_temp;\n"
- " access_log " log-directory "/access.log;\n"
+ (map emit-nginx-log-format-config log-formats)
+ " access_log " log-directory "/access.log " (symbol->string log-format) ";\n"
" include " nginx "/share/nginx/conf/mime.types;\n"
(if lua-package-path
#~(format #f " lua_package_path ~s;~%"
--
2.41.0
[Message part 3 (message/rfc822, inline)]
Hi,
Leo Nikkilä <hello <at> lnikki.la> skribis:
> Oops, accidentally erased one of the hunks in the patch. Here's v2.
>
> * gnu/services/web.scm (<nginx-log-format-configuration>): New record.
> (<nginx-configuration>)[log-format, log-formats]: New fields.
> (assert-valid-log-format-escape): New procedure.
> (emit-nginx-log-format-config): New procedure.
> (default-nginx-config): Make log formats configurable.
> * doc/guix.texi (Web Services): Document it.
Finally applied. Thank you, and apologies for the terrible delay!
Ludo’.
This bug report was last modified 126 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.