The only thing added to the error log was when mailmanweb was restarted. Nothing when the web page was accessed:
[2025-11-01 14:58:54 -0400] [220272] [DEBUG] Current configuration: config: /etc/mailman3/gunicorn.py wsgi_app: None bind: ['127.0.0.1:8000'] backlog: 2048 workers: 3 worker_class: sync threads: 1 worker_connections: 1000 max_requests: 0 max_requests_jitter: 0 timeout: 30 graceful_timeout: 30 keepalive: 2 limit_request_line: 4094 limit_request_fields: 100 limit_request_field_size: 8190 reload: False reload_engine: auto reload_extra_files: [] spew: False check_config: False print_config: False preload_app: False sendfile: None reuse_port: False chdir: /opt/mailman/mm daemon: False raw_env: [] pidfile: /opt/mailman/mm/var/gunicorn.pid worker_tmp_dir: None user: 1001 group: 1001 umask: 0 initgroups: False tmp_upload_dir: None secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'} forwarded_allow_ips: ['127.0.0.1', '::1'] accesslog: /opt/mailman/mm/var/logs/access.log disable_redirect_access_to_syslog: False access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" errorlog: /opt/mailman/mm/var/logs/error.log loglevel: debug capture_output: False logger_class: gunicorn.glogging.Logger logconfig: None logconfig_dict: {} logconfig_json: None syslog_addr: udp://localhost:514 syslog: False syslog_prefix: None syslog_facility: user enable_stdio_inheritance: False statsd_host: None dogstatsd_tags: statsd_prefix: proc_name: mailman-web default_proc_name: mailman_web.wsgi:application pythonpath: None paste: None on_starting: <function OnStarting.on_starting at 0x7e196c340e00> on_reload: <function OnReload.on_reload at 0x7e196c340f40> when_ready: <function WhenReady.when_ready at 0x7e196c341080> pre_fork: <function Prefork.pre_fork at 0x7e196c341260> post_fork: <function Postfork.post_fork at 0x7e196c3413a0> post_worker_init: <function PostWorkerInit.post_worker_init at 0x7e196c3414e0> worker_int: <function WorkerInt.worker_int at 0x7e196c341620> worker_abort: <function WorkerAbort.worker_abort at 0x7e196c341760> pre_exec: <function PreExec.pre_exec at 0x7e196c3418a0> pre_request: <function PreRequest.pre_request at 0x7e196c3419e0> post_request: <function PostRequest.post_request at 0x7e196c341a80> child_exit: <function ChildExit.child_exit at 0x7e196c341bc0> worker_exit: <function WorkerExit.worker_exit at 0x7e196c341d00> nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7e196c341e40> on_exit: <function OnExit.on_exit at 0x7e196c341f80> ssl_context: <function NewSSLContext.ssl_context at 0x7e196c342160> proxy_protocol: False proxy_allow_ips: ['127.0.0.1', '::1'] keyfile: None certfile: None ssl_version: 2 cert_reqs: 0 ca_certs: None suppress_ragged_eofs: True do_handshake_on_connect: False ciphers: None raw_paste_global_conf: [] permit_obsolete_folding: False strip_header_spaces: False permit_unconventional_http_method: False permit_unconventional_http_version: False casefold_http_method: False forwarder_headers: ['SCRIPT_NAME', 'PATH_INFO'] header_map: drop [2025-11-01 14:58:54 -0400] [220272] [INFO] Starting gunicorn 23.0.0 [2025-11-01 14:58:54 -0400] [220272] [DEBUG] Arbiter booted [2025-11-01 14:58:54 -0400] [220272] [INFO] Listening at: http://127.0.0.1:8000 (220272) [2025-11-01 14:58:54 -0400] [220272] [INFO] Using worker: sync [2025-11-01 14:58:54 -0400] [220273] [INFO] Booting worker with pid: 220273 [2025-11-01 14:58:54 -0400] [220274] [INFO] Booting worker with pid: 220274 [2025-11-01 14:58:54 -0400] [220275] [INFO] Booting worker with pid: 220275 [2025-11-01 14:58:54 -0400] [220272] [DEBUG] 3 workers
As an aside, mailmanweb will not start with gunicorn named gunicorn.conf. It only works if it is named gunicorn.py. I don't know if that is an Ubuntu thing but it probably needs to be documented.