test: apply microsecond precision to test framework logging

This makes it easier to compare test and bitcoind logs -
combine_logs.py orders by timestamp and will be more precise.
This commit is contained in:
Martin Zumsande committed 2025-06-03 14:02:01 -04:00
1 parent e872a566f2
commit ed179e0a65
1 file changed
+10 -2
@@ -7,6 +7,7 @@
import configparser import configparser
from enum import Enum from enum import Enum
import argparse import argparse
from datetime import datetime, timezone
import logging import logging
import os import os
import platform import platform
@@ -837,9 +838,16 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
# User can provide log level as a number or string (eg DEBUG). loglevel was caught as a string, so try to convert it to an int # User can provide log level as a number or string (eg DEBUG). loglevel was caught as a string, so try to convert it to an int
ll = int(self.options.loglevel) if self.options.loglevel.isdigit() else self.options.loglevel.upper() ll = int(self.options.loglevel) if self.options.loglevel.isdigit() else self.options.loglevel.upper()
ch.setLevel(ll) ch.setLevel(ll)
# Format logs the same as bitcoind's debug.log with microprecision (so log files can be concatenated and sorted) # Format logs the same as bitcoind's debug.log with microprecision (so log files can be concatenated and sorted)
formatter = logging.Formatter(fmt='%(asctime)s.%(msecs)03d000Z %(name)s (%(levelname)s): %(message)s', datefmt='%Y-%m-%dT%H:%M:%S') class MicrosecondFormatter(logging.Formatter):
formatter.converter = time.gmtime def formatTime(self, record, _=None):
dt = datetime.fromtimestamp(record.created, timezone.utc)
return dt.strftime('%Y-%m-%dT%H:%M:%S.%f')
formatter = MicrosecondFormatter(
fmt='%(asctime)sZ %(name)s (%(levelname)s): %(message)s',
)
fh.setFormatter(formatter) fh.setFormatter(formatter)
ch.setFormatter(formatter) ch.setFormatter(formatter)
# add the handlers to the logger # add the handlers to the logger