繁体   English   中英

如何将打印语句重定向到日志文件并将打印语句更改为 django python 中的记录器

[英]How to redirect print statement to log file and change print statement to logger in django python

我想将打印语句替换为记录器,但不更改应用程序中的打印语句。 以及如何将打印语句重定向到日志文件???

下面是我的代码。

设置.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.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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM