Я нашел пару стандартных способов настроить ведение журнала из файлов.Надеемся, что в конечном итоге PyCharm будет иметь плагины с красивыми графическими интерфейсами для создания этих файлов.
fileConfig()
- Самый простой способ
Использовать аргумент FileType для ArgParse для использованиякак регистратор fileConfig()
.
import argparse
import logging
import logging.config
argument_parser = argparse.ArgumentParser()
argument_parser.add('--logging-conf-path', type=argparse.FileType('r'),
help='path to logging configuration file',
default='./logging.conf',
)
args = argument_parser.parse_args()
if args.logging_conf_path:
logging.config.fileConfig(args.logging_conf_path.name)
Это идет с этим предостережением, хотя:
Примечание: The *API 1019 *fileConfig()
более старый, чем API dictConfig()
, и не обеспечивает функциональность, охватывающую определенные аспекты ведения журнала.Например, вы не можете настроить Filter
объекты, которые обеспечивают фильтрацию сообщений за пределами простых целочисленных уровней, используя fileConfig()
.Если вам нужно иметь экземпляры Filter
в вашей конфигурации ведения журнала, вам нужно будет использовать dictConfig()
.Обратите внимание, что будущие улучшения функциональности конфигурации будут добавлены к dictConfig()
, поэтому стоит рассмотреть переход на этот более новый API, когда это удобно.
Но вот пример файла logging.conf, который соответствует формату файла конфигурации журналирования (именно там отмечается предупреждение):
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
dictConfig()
-Complete Way
Используется dictConfig()
, рекомендованный в предупреждении выше.Так как моя программа уже использует файлы YAML для конфигурации, я прочитал dict, используя PyYAML
import argparse
import logging
import logging.config
import yaml
argument_parser = argparse.ArgumentParser()
argument_parser.add('--logging-yaml-path', type=argparse.FileType('r'),
help='path to logging configuration file',
default='./logging.yaml',
)
args = argument_parser.parse_args()
if args.logging_yaml_path:
log_config = yaml.load(args.logging_yaml_path)
logging.config.dictConfig(log_config)
И вот пример файла logging.yaml, который следует конфигурации журналирования словарная схема :
version: 1
formatters:
brief:
format: '%(message)s'
default:
format: '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'
datefmt: '%Y-%m-%d %H:%M:%S'
handlers:
console:
class: logging.StreamHandler
level: WARN
formatter: brief
stream: ext://sys.stdout
file:
class : logging.handlers.TimedRotatingFileHandler
formatter: default
filename: ./gmartian.log
when: w0
backupCount: 6
root:
level: INFO
handlers:
- console
- file