更改Python中logger生成的日志文件的默认位置

13

我在我的Python源代码中使用日志记录器,想要在特定位置创建日志,但是Python logging模块会将日志文件创建在默认位置,即从其执行的位置。

有没有办法更改这个默认位置?

以下是我的配置信息:

  import logging
  logger = logging.getLogger(__name__)
  logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='testGene.log, filemode='w')

我认为你应该先执行basicConfig调用。 - RufusVS
4个回答

14

试一下这个:

import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='path/to/your/directory/testGene.log', filemode='w')

或者
import logging
import os
if not os.path.exists("Logs"):
    os.makedirs("Logs")
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='Logs/testGene.log', filemode='w')

1
这样做是行不通的,当你运行Python源代码时,它会尝试添加以下两个位置,最终会出现错误“没有这样的文件或目录”: 1:日志文件的路径位置 2:脚本执行的位置 - Aman Jaiswal
如果你的平台是Linux,它就会运行。默认情况下,它会添加当前工作目录的路径。 - Hayat
请尝试从多个位置运行给定的解决方案,您将会创建多个文件夹,这永远不会只针对一个目标文件夹。 - Aman Jaiswal

1

初始化日志记录器时,请指定您希望保存日志的位置。

logging.config.fileConfig('logging.config',
                      defaults={'yourlogfile': '/path/to/log/file'})

1
这样做行不通,当你运行Python源代码时,它会尝试添加下面两个位置,结果会出现“没有该文件或目录”的错误: 1:日志文件的路径位置 2:脚本执行的位置 - Aman Jaiswal

1
import logging as log
import os

dir_path = os.path.dirname(os.path.realpath(__file__))

if not os.path.exists(dir_path+"/Logs"):
    os.makedirs(dir_path+"/Logs")

log.basicConfig(level=log.DEBUG,
                format='%(asctime)s: %(levelname)s [%(filename)s:%(lineno)s] %(message)s',
                datefmt='%d/%m/%Y %I:%M:%S %p',
                handlers=[log.FileHandler(dir_path+'/Logs/file_logs.log'),
                          log.StreamHandler()]
                )

1
创建一个名为log_to_text_file.py的模块,其中包含以下代码:
import logging, logging.handlers
def get_logger(module_name):
    logger = logging.getLogger(module_name)
    logger.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s:%(levelname)s : %(name)s : %(message)s')
    file_handler = logging.FileHandler('//loglocation/application.log')
    file_handler.setFormatter(formatter)

    if (logger.hasHandlers()):
        logger.handlers.clear()
    logger.addHandler(file_handler)
    return logger

在其他模块的开头导入该模块,并像这样调用函数:

log = get_logger(__name__)                                                    
log.info(f"this is info logging)
log.exception("This is exception logging")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接