Как перенаправить оператор печати в файл журнала и изменить оператор печати на регистратор в django python
Я хочу заменить операторы печати на логгер, но без изменения оператора печати в приложении. И как я могу перенаправить оператор печати в файл журнала?
Ниже приведен мой код.
settings.py
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"simple": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
},
"verbose": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
"debug": {
"class": "logging.handlers.TimedRotatingFileHandler",
"level": "DEBUG",
"formatter": "verbose",
"when": "D", # when='D', interval=7 were specified, then the log would be rotated every seven days.
"interval": 7,
"backupCount": 7, # Only kept last 7 days log files
"filename": "log/debug.log",
},
"info": {
"class": "logging.handlers.TimedRotatingFileHandler",
"level": "INFO",
"formatter": "verbose",
"when": "D", # when='D', interval=7 were specified, then the log would be rotated every seven days.
"interval": 7,
"backupCount": 7, # Only kept last 7 days log files
"filename": "log/info.log",
},
"error": {
"class": "logging.handlers.TimedRotatingFileHandler",
"level": "ERROR",
"formatter": "verbose",
"when": "D", # when='D', interval=7 were specified, then the log would be rotated every seven days.
"interval": 7,
"backupCount": 7, # Only kept last 7 days log files
"filename": "log/error.log",
},
},
"loggers": {
"root": {
"level": "DEBUG",
"handlers": ["console"]
},
"django": {
"level": "DEBUG",
"handlers": ["debug", "info", "error"],
"propagate": True,
"qualname": "app"
},
}
}
view.py Я пробовал нижеприведенный код для печати журнала в файл, но он не работает.
import logging
logger = logging.getLogger(__name__)
logger.debug('Testing')
Для изменения оператора print на logger я пробовал print=logger.info, но не работает.
Например, при использовании следующего кода, используя StringIO, печатаемая информация будет перераспределена в print_str, который является объектом byte_string. До file=print_str
вы можете печатать что угодно, как вы обычно используете оператор print. any_variable_or_object
может быть что угодно, число, список, объект и т.д.
from io import StringIO
import logging
import pandas as pd
print_str = StringIO()
any_variable_or_object = pd.DataFrame()
print("the result of of any variables;", any_variable_or_object, file=print_str)
logging.info(print_str.getvalue())