Collates values needed by LOG_FORMAT

    This adds additional information to the log record to implement the logging standard.

    :return: A log record augmented with the values required by LOG_FORMAT:
     * springtime: LogRecord.asctime, but with a `.` instead of a `,` as the millisecond separator
     * levelname_spring: specifically, "WARN" instead of "WARNING"
     * process_id
     * thread_name
     * logger_name
     * tracing_information: if B3 values have not been collected this will be an empty string

def _update_record(record):
    """Collates values needed by LOG_FORMAT

    This adds additional information to the log record to implement the logging standard.

    :return: A log record augmented with the values required by LOG_FORMAT:
     * springtime: LogRecord.asctime, but with a `.` instead of a `,` as the millisecond separator
     * levelname_spring: specifically, "WARN" instead of "WARNING"
     * process_id
     * thread_name
     * logger_name
     * tracing_information: if B3 values have not been collected this will be an empty string
    """

    # Standard fields
    dt = datetime.fromtimestamp(record.created)
    # Truncate microseconds to milliseconds
    record.springtime = str(dt)[:-3]
    record.levelname_spring = "WARN" if record.levelname == "WARNING" else record.levelname
    record.process_id = str(os.getpid())
    record.thread_name = (current_thread().getName())[:15]
    record.logger_name = record.name[:40]
    record.tracing_information = ""

    # Optional distributed tracing information
    tracing_information = _tracing_information()
    if tracing_information:
        record.tracing_information = "[" + ",".join(tracing_information) + "] "