Python 创建日志包装器

Python 创建日志包装器,python,logbook,Python,Logbook,我不熟悉日志和python,并找到了一个名为logbook的库,我想使用它。我正在尝试某种包装,它可以初始化日志文件,然后从不同的文件调用它 但我一直在犯错误。我做错了什么 self.stream = io.open(self._filename, mode, encoding=self.encoding) TypeError: expected str, bytes or os.PathLike object, not NoneType logger.py from logbook impo

我不熟悉日志和python,并找到了一个名为
logbook
的库,我想使用它。我正在尝试某种包装,它可以初始化日志文件,然后从不同的文件调用它

但我一直在犯错误。我做错了什么

self.stream = io.open(self._filename, mode, encoding=self.encoding)
TypeError: expected str, bytes or os.PathLike object, not NoneType
logger.py

from logbook import Logger, StreamHandler
from logbook import FileHandler
import sys
import os

log = Logger()

initialized = False

def make_log_dir_if_missing(log_dir):
    import cheetax.utils.system
    cheetax.system.make_directory(log_dir)

def initialize_logger(path=None):
    global initialized, log

    if initialized:
        return

    if path is not None:
        make_log_dir_if_missing(path)
        log_path = os.path.join(path, 'logger.log')

    log_handler = FileHandler(path)
    log_handler.push_application()


    initialized = True


GLOBAL_LOGGER = log
def main():
    initialize_logger()
cli.py

from logbook import Logger, StreamHandler
from logbook import FileHandler
import sys
import os

log = Logger()

initialized = False

def make_log_dir_if_missing(log_dir):
    import cheetax.utils.system
    cheetax.system.make_directory(log_dir)

def initialize_logger(path=None):
    global initialized, log

    if initialized:
        return

    if path is not None:
        make_log_dir_if_missing(path)
        log_path = os.path.join(path, 'logger.log')

    log_handler = FileHandler(path)
    log_handler.push_application()


    initialized = True


GLOBAL_LOGGER = log
def main():
    initialize_logger()
其他文件

logger.info(welcome)

问题是您没有提供默认的日志目录,因此当您不向
initialize\u logger()
传递任何内容时,行
log\u handler=FileHandler(path)
将失败。只需在将
path
设置到某个位置的
if path为None
语句中添加and else即可:)



更好的是,只需将
path=None
更改为
path='/path/to/default.log'
或其他什么。

您不使用标准Python库的原因是什么?如果您能提供上述im open之类的最小解决方案,则不太可能。这里有一个写入文件的快速示例。