mirror of
https://github.com/storytold/storyteller-ml.git
synced 2026-10-13 23:53:02 +00:00
046ab789c0
https://lucaria-academy.github.io/Animate-X/ https://github.com/antgroup/animate-x @ fdc80909f911d8e487cb4e6847f2e4c6501b62af
91 lines
2.4 KiB
Python
91 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
|
|
"""Logging."""
|
|
|
|
import builtins
|
|
import decimal
|
|
import functools
|
|
import logging
|
|
import os
|
|
import sys
|
|
import simplejson
|
|
# from fvcore.common.file_io import PathManager
|
|
|
|
import utils.distributed as du
|
|
|
|
|
|
def _suppress_print():
|
|
"""
|
|
Suppresses printing from the current process.
|
|
"""
|
|
|
|
def print_pass(*objects, sep=" ", end="\n", file=sys.stdout, flush=False):
|
|
pass
|
|
|
|
builtins.print = print_pass
|
|
|
|
|
|
# @functools.lru_cache(maxsize=None)
|
|
# def _cached_log_stream(filename):
|
|
# return PathManager.open(filename, "a")
|
|
|
|
|
|
def setup_logging(cfg, log_file):
|
|
"""
|
|
Sets up the logging for multiple processes. Only enable the logging for the
|
|
master process, and suppress logging for the non-master processes.
|
|
"""
|
|
if du.is_master_proc():
|
|
# Enable logging for the master process.
|
|
logging.root.handlers = []
|
|
else:
|
|
# Suppress logging for non-master processes.
|
|
_suppress_print()
|
|
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.INFO)
|
|
logger.propagate = False
|
|
plain_formatter = logging.Formatter(
|
|
"[%(asctime)s][%(levelname)s] %(name)s: %(lineno)4d: %(message)s",
|
|
datefmt="%m/%d %H:%M:%S",
|
|
)
|
|
|
|
if du.is_master_proc():
|
|
ch = logging.StreamHandler(stream=sys.stdout)
|
|
ch.setLevel(logging.DEBUG)
|
|
ch.setFormatter(plain_formatter)
|
|
logger.addHandler(ch)
|
|
|
|
if log_file is not None and du.is_master_proc(du.get_world_size()):
|
|
filename = os.path.join(cfg.OUTPUT_DIR, log_file)
|
|
fh = logging.FileHandler(filename)
|
|
fh.setLevel(logging.DEBUG)
|
|
fh.setFormatter(plain_formatter)
|
|
logger.addHandler(fh)
|
|
|
|
|
|
def get_logger(name):
|
|
"""
|
|
Retrieve the logger with the specified name or, if name is None, return a
|
|
logger which is the root logger of the hierarchy.
|
|
Args:
|
|
name (string): name of the logger.
|
|
"""
|
|
return logging.getLogger(name)
|
|
|
|
|
|
def log_json_stats(stats):
|
|
"""
|
|
Logs json stats.
|
|
Args:
|
|
stats (dict): a dictionary of statistical information to log.
|
|
"""
|
|
stats = {
|
|
k: decimal.Decimal("{:.6f}".format(v)) if isinstance(v, float) else v
|
|
for k, v in stats.items()
|
|
}
|
|
json_stats = simplejson.dumps(stats, sort_keys=True, use_decimal=True)
|
|
logger = get_logger(__name__)
|
|
logger.info("{:s}".format(json_stats))
|