Skip to content

Commit 3da004f

Browse files
committed
fix: log to a file by default
Create a log file by default, messages at INFO and above to it. Provide the env var APPMAP_DISABLE_LOG_FILE to instead log (at WARNING, by default) to stderr.
1 parent 3dba2a2 commit 3da004f

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

_appmap/configuration.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,6 @@ def __init__(self):
142142

143143
self._load_config()
144144
self._load_functions()
145-
logger.info("config: %s", self._config)
146-
logger.debug("package_functions: %s", self.package_functions)
147145

148146
if "labels" in self._config:
149147
self.labels.append(self._config["labels"])
@@ -415,3 +413,8 @@ def initialize():
415413

416414

417415
initialize()
416+
417+
c = Config()
418+
logger.info("config: %s", c._config)
419+
logger.debug("package_functions: %s", c.package_functions)
420+
logger.info("env: %r", os.environ)

_appmap/env.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import logging.config
55
import os
66
from contextlib import contextmanager
7+
from datetime import datetime
78
from os import environ
89
from pathlib import Path
910
from typing import cast
@@ -124,11 +125,10 @@ def getLogger(self, name) -> trace_logger.TraceLogger:
124125
def _configure_logging(self):
125126
trace_logger.install()
126127

127-
log_level = self.get("APPMAP_LOG_LEVEL", "warning").upper()
128-
128+
log_level = self.get("APPMAP_LOG_LEVEL", "warn").upper()
129+
disable_log = os.environ.get("APPMAP_DISABLE_LOG_FILE", "false").upper() != "FALSE"
129130
log_config = self.get("APPMAP_LOG_CONFIG")
130-
log_stream = self.get("APPMAP_LOG_STREAM", "stderr")
131-
log_stream = "ext://sys.%s" % (log_stream)
131+
now = datetime.now()
132132
config_dict = {
133133
"version": 1,
134134
"disable_existing_loggers": False,
@@ -138,9 +138,7 @@ def _configure_logging(self):
138138
"format": "[{asctime}] {levelname} {name}: {message}",
139139
}
140140
},
141-
"handlers": {
142-
"default": {"class": "logging.StreamHandler", "formatter": "default"}
143-
},
141+
"handlers": {"default": {"class": "logging.StreamHandler", "formatter": "default"}},
144142
"loggers": {
145143
"appmap": {
146144
"level": log_level,
@@ -154,6 +152,20 @@ def _configure_logging(self):
154152
},
155153
},
156154
}
155+
if not disable_log:
156+
# Default to being more verbose if we're logging to a file, but
157+
# still allow the level to be overridden.
158+
log_level = self.get("APPMAP_LOG_LEVEL", "info").upper()
159+
loggers = config_dict["loggers"]
160+
loggers["appmap"]["level"] = loggers["_appmap"]["level"] = log_level
161+
config_dict["handlers"] = {
162+
"default": {
163+
"class": "logging.FileHandler",
164+
"formatter": "default",
165+
"filename": f"appmap-{now:%Y%m%d%H%M%S}-{os.getpid()}.log",
166+
}
167+
}
168+
157169
if log_config is not None:
158170
name, level = log_config.split("=", 2)
159171
config_dict["loggers"].update(

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ urllib3 = "^1"
7878
uvicorn = "^0.27.1"
7979
fastapi = "^0.110.0"
8080
httpx = "^0.27.0"
81+
pytest-env = "^1.1.3"
8182

8283
[build-system]
8384
requires = ["poetry-core>=1.1.0"]

pytest.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ addopts = --runpytest subprocess --ignore vendor
1717
# We're stuck at pytest ~6.1.2. This warning got removed in a later
1818
# version.
1919
filterwarnings = ignore:testdir.copy_example is an experimental api that may change over time
20+
21+
env =
22+
APPMAP_DISABLE_LOG_FILE = true

0 commit comments

Comments
 (0)