Skip to content

Commit 40976db

Browse files
authored
Merge pull request #206 from akquinet/issue-205
Log File configurable & log error instead of crashing on missing permissions
2 parents 598bd7d + 9358805 commit 40976db

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,11 @@ index_html: |
324324
### Environment Variables
325325

326326
```bash
327-
LOG_LEVEL=DEBUG # Optional: DEBUG, INFO, WARNING, ERROR (default: DEBUG)
328-
LOG_FORMAT=json # Optional: "text" (default) or "json" for structured logging
329-
LISTEN_HOST=0.0.0.0 # Optional: Host to bind to (default: *)
330-
LISTEN_PORT=8000 # Optional: Port to listen on (default: 8000)
327+
LOG_LEVEL=DEBUG # Optional: DEBUG, INFO, WARNING, ERROR (default: DEBUG)
328+
LOG_FORMAT=json # Optional: "text" (default) or "json" for structured logging
329+
LOG_FILE=/var/log/app.log # Optional: Log file path (default: "log"), set to "false" to disable file logging
330+
LISTEN_HOST=0.0.0.0 # Optional: Host to bind to (default: *)
331+
LISTEN_PORT=8000 # Optional: Port to listen on (default: 8000)
331332
```
332333

333334
When `LOG_FORMAT=json` is set, all logs (application and uvicorn access logs) will be output in JSON format.

powerdns_api_proxy/logging.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,19 @@ def audit(
9696
default_stream_handler.setLevel(LOG_LEVEL)
9797
default_stream_handler.setFormatter(default_formatter)
9898

99-
file_handler = logging.handlers.RotatingFileHandler(
100-
filename="log", maxBytes=1000**2 * 100, backupCount=5
101-
)
102-
file_handler.setLevel("DEBUG")
103-
file_handler.setFormatter(default_formatter)
104-
10599
logger: AuditLogger = logging.getLogger("powerdns_api_proxy") # type: ignore
106100
logger.addHandler(default_stream_handler)
107-
logger.addHandler(file_handler)
101+
102+
LOG_FILE = getenv("LOG_FILE", "log")
103+
if LOG_FILE and LOG_FILE.lower() != "false":
104+
try:
105+
file_handler = logging.handlers.RotatingFileHandler(
106+
filename=LOG_FILE, maxBytes=1000**2 * 100, backupCount=5
107+
)
108+
file_handler.setLevel(LOG_LEVEL)
109+
file_handler.setFormatter(default_formatter)
110+
logger.addHandler(file_handler)
111+
except OSError as e:
112+
logger.error(f"Failed to enable file logging to {LOG_FILE}: {e}")
108113

109114
logger.setLevel("DEBUG")

0 commit comments

Comments
 (0)