在Python 2中指定自定义日志Linux文件路径

在Python 2中指定自定义日志Linux文件路径,python,linux,logging,Python,Linux,Logging,我正在试图了解日志文件是如何使用的 我知道我可以使用以下方法将日志输出保存到文本文件: logging.basicConfig(filename='example.log',level=logging.DEBUG) 从以下文件中我不清楚: 绝对文件名路径是否有效 指定相对路径的正确语法(假设。/example.log有效) 如果我从/home/bob执行此脚本,我如何指定希望将日志文件保存到/tmp目录-使用绝对路径和相对路径 logging.basicConfig(filename='../

我正在试图了解日志文件是如何使用的

我知道我可以使用以下方法将日志输出保存到文本文件:

logging.basicConfig(filename='example.log',level=logging.DEBUG)
从以下文件中我不清楚:

  • 绝对
    文件名
    路径是否有效
  • 指定相对路径的正确语法(假设
    。/example.log
    有效)
  • 如果我从
    /home/bob
    执行此脚本,我如何指定希望将日志文件保存到
    /tmp
    目录-使用绝对路径和相对路径

    logging.basicConfig(filename='../../tmp/example.log')
    有效吗


    类似地,
    logging.basicConfig(filename='/tmp/example.log')
    是否有效?

    仅说明文件名时,它将写入当前目录。 使用pythonidle,您可以如下检查

    >>> import logging
    >>> logging.basicConfig(filename='relative.log')
    >>> logging.info('test')
    
    C:\Python27\relative.log
    
    我的工作目录是Python27,我在那里有一个名为relative.log的文件,其中包含我记录的消息

    当您将文件位置更改为
    。/relative.log
    ,我将在Python27的父目录中获得一个新文件。因此,相对路径可用于日志记录:

    >>> import logging
    >>> logging.basicConfig(filename='../relative.log')
    >>> logging.info('test123')
    
    C:\relative.log
    
    日志记录
    模块还支持绝对路径

    >>> logging.basicConfig(filename=r'c:\abs_path.log')
    >>> logging.info('test')
    
    C:\abs_path.log
    

    始终最好使用绝对路径,因为显式优于隐式

    它们都是有效的。但是相对路径(带..)将根据运行时所在的目录选择不同的文件

    因此,当您在
    /home/user/projects/python
    中运行
    logger.py
    并且文件名为
    。/log.txt
    时,文件将保存在
    /home/user/projects
    中。另一方面,当您在
    /home/user
    中运行脚本时,
    log.txt
    将保存在
    /home/

    绝对路径始终有效且更可靠。如果您希望在当前目录中保存文件,我建议您采用以下方法:

    basedir = os.path.abspath(os.path.dirname(__file__))
    filename = os.path.join(basedir, 'file.txt')
    

    谢谢-这的确是一个愚蠢的问题。我已经验证了绝对路径也可以在Linux环境下使用。注意,如果您在Windows平台上运行绝对路径,您需要在写入路径之前为raw添加
    r
    ,否则它将抛出错误,除非您跳过路径中的每个斜杠