Skip to content

Commit cccc7dc

Browse files
authored
Merge pull request #1185 from MetOffice/simplify_logging
Simplify logging
2 parents ea7d273 + 6fc3bad commit cccc7dc

File tree

4 files changed

+26
-32
lines changed

4 files changed

+26
-32
lines changed

src/CSET/__init__.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -187,42 +187,42 @@ def setup_logging(verbosity: int):
187187
logging.captureWarnings(True)
188188

189189
# Calculate logging level.
190-
try:
191-
name_to_level = logging.getLevelNamesMapping()
192-
except AttributeError:
193-
# logging.getLevelNamesMapping() is python 3.11 or newer. Using
194-
# implementation detail for older versions.
195-
name_to_level = logging._nameToLevel
196190
# Level from CLI flags.
197191
if verbosity >= 2:
198192
cli_loglevel = logging.DEBUG
199193
elif verbosity == 1:
200194
cli_loglevel = logging.INFO
201195
else:
202196
cli_loglevel = logging.WARNING
203-
# Level from environment variable.
197+
198+
# Level from $LOGLEVEL environment variable.
199+
try:
200+
name_to_level = logging.getLevelNamesMapping()
201+
except AttributeError:
202+
# logging.getLevelNamesMapping() is python 3.11 or newer. Using
203+
# implementation detail for older versions.
204+
name_to_level = logging._nameToLevel
204205
env_loglevel = name_to_level.get(os.getenv("LOGLEVEL"), logging.ERROR)
206+
207+
# Logging verbosity is the most verbose of CLI and environment setting.
205208
loglevel = min(cli_loglevel, env_loglevel)
206209

207210
# Configure the root logger.
208211
logger = logging.getLogger()
209-
# Record everything at least INFO for the log file.
210-
logger.setLevel(min(loglevel, logging.INFO))
212+
# Set logging level.
213+
logger.setLevel(loglevel)
214+
211215
# Hide matplotlib's many font messages.
212-
logger.addFilter(
213-
lambda record: not (
214-
isinstance(record, str) and record.msg.startswith("findfont:")
215-
)
216-
)
216+
class NoFontMessageFilter(logging.Filter):
217+
def filter(self, record):
218+
return not record.getMessage().startswith("findfont:")
219+
220+
logging.getLogger("matplotlib.font_manager").addFilter(NoFontMessageFilter())
221+
217222
stderr_log = logging.StreamHandler()
218-
# Filter stderr log to just what is requested.
219-
stderr_log.addFilter(lambda record: record.levelno >= loglevel)
220-
stderr_log.addFilter(
221-
lambda record: not (
222-
isinstance(record, str) and record.msg.startswith("findfont:")
223-
)
223+
stderr_log.setFormatter(
224+
logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
224225
)
225-
stderr_log.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))
226226
logger.addHandler(stderr_log)
227227

228228

src/CSET/_workflow_utils/run_cset_recipe.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,9 @@ def run_recipe_steps():
108108

109109
logging.info("Running %s", " ".join(command))
110110
try:
111-
subprocess.run(command, check=True, env=subprocess_env(), capture_output=True)
111+
subprocess.run(command, check=True, env=subprocess_env())
112112
except subprocess.CalledProcessError as err:
113-
logging.exception(
114-
"cset bake exited with non-zero code %s.\nstdout: %s\nstderr: %s",
115-
err.returncode,
116-
err.stdout.decode(sys.stdout.encoding),
117-
err.stderr.decode(sys.stderr.encoding),
118-
)
113+
logging.exception("cset bake exited with non-zero code %s.", err.returncode)
119114
raise
120115
create_diagnostic_archive(output_directory())
121116

src/CSET/operators/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,8 @@ def _run_steps(
168168
diagnostic_log = logging.FileHandler(
169169
filename="CSET.log", mode="w", encoding="UTF-8"
170170
)
171-
diagnostic_log.addFilter(lambda record: record.levelno >= logging.INFO)
172171
diagnostic_log.setFormatter(
173-
logging.Formatter("%(asctime)s %(levelname)s %(message)s")
172+
logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
174173
)
175174
logger.addHandler(diagnostic_log)
176175
# Create metadata file used by some steps.

tests/test_cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ def test_argument_parser():
5656
def test_setup_logging():
5757
"""Tests the logging setup at various verbosity levels."""
5858
root_logger = logging.getLogger()
59-
# Log level gets pinned at a minimum of INFO for file output.
59+
# Log has a minimum of WARNING.
6060
CSET.setup_logging(0)
61-
assert root_logger.level == logging.INFO
61+
assert root_logger.level == logging.WARNING
6262
# -v
6363
CSET.setup_logging(1)
6464
assert root_logger.level == logging.INFO

0 commit comments

Comments
 (0)