日志#

本文介绍 Xorbits 的日志系统。默认情况下,Xorbits 日志将写入 stderr 以及文件中。

输出日志到 stderr#

默认情况下,stderr 的日志级别被设置为 WARNING 以限制日志输出量。

本地部署 下,您可以在初始化 Xorbits 前修改日志的级别与格式:

import logging
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

import xorbits
# Logs ...
xorbits.init()
# Logs ...

集群部署 下,您可以在启动 Xorbits supervisor 和 worker 时指定日志配置文件以修改日志级别和格式:

python -m xorbits.supervisor \
       -H <supervisor_ip> \
       -p <supervisor_port> \
       -w <web_port> \
       --log-config /path/to/logging.conf

要创建您自己的日志配置文件,请参考日志配置文件 模版

输出日志到文件#

默认情况下,Xorbits 的日志保存在 Linux 和 Mac OS 的 /tmp/xorbits/logs 目录下,Windows 下则为 C:\Temp\xorbits\logs 目录。文件的默认日志级别为 DEBUG 以方便错误定位。

备注

v0.3.0 起,Xorbits 在 Linux,Mac OS 和 Windows 上存放日志的目录均为 ~/.xorbits/logs 。你可以通过以下代码检查系统当前用户的 Home 目录:

from pathlib import Path
print(Path.home())

本地部署#

本地部署 下,Xorbits 会在日志目录下创建一个子目录。子目录的名称对应于进程启动时间(以纳秒为单位)。在本地部署下,Xorbits supervisor 和 worker 的日志会被合并为单个文件。下面是日志目录结构示例:

/tmp/xorbits
└── logs
    └── 1679904140623326000
        └── xorbits.log

备注

v0.3.0 起,对于用户 test ,日志目录结构如下所示:

/home/test/.xorbits
└── logs
    └── 1679904140623326000
        └── xorbits.log

如果您想更改日志目录、级别或格式,请在调用 xorbits.init() 时指定它们:

import xorbits
xorbits.init(
    log_config={
        "log_dir": "/path/to/logs",
        "level": "WARNING",
        "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    }
)

集群部署#

集群部署 下,Xorbits supervisor 和 worker 会各自在日志目录下创建自己的子目录。子目录的名称以角色名称开头,后跟进程启动时间(以纳秒为单位)。下面是日志目录结构示例:

/tmp/xorbits
└── logs
    ├── supervisor_1679923647642312000
    │   └── xorbits.log
    └── worker_1679923657597859000
        └── xorbits.log

备注

v0.3.0 起,对于用户 test ,日志目录结构如下所示:

/home/test/.xorbits
└── logs
    ├── supervisor_1679923647642312000
    │   └── xorbits.log
    └── worker_1679923657597859000
        └── xorbits.log

您可以使用命令行参数轻松修改日志级别、格式或目录。例如:

python -m xorbits.supervisor \
       -H <supervisor_ip> \
       -p <supervisor_port> \
       -w <web_port> \
       --log-level INFO
       --log-format '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
       --log-dir /path/to/logs

日志滚动#

Xorbits 支持日志文件的日志滚动。默认情况下,当日志文件大小达到 100MB(maxBytes)时,日志会进行滚动,并且会保留多达 30 个备份文件(backupCount)。

日志配置文件模版#

下面是一个日志配置文件模版,供您参考:

[loggers]
keys=root,main,deploy,services,oscar,tornado,dataframe,learn,tensor,xorbits_core,xorbits_deploy,xorbits_numpy,xorbits_pandas,xorbits_remote,xorbits_web

[handlers]
keys=stream_handler,file_handler

[formatters]
keys=formatter

[logger_root]
level=WARN
handlers=stream_handler,file_handler

[logger_main]
level=DEBUG
handlers=stream_handler,file_handler
qualname=__main__
propagate=0

[logger_deploy]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.deploy
propagate=0

[logger_oscar]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.oscar
propagate=0

[logger_services]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.services
propagate=0

[logger_dataframe]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.dataframe
propagate=0

[logger_learn]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.learn
propagate=0

[logger_tensor]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits._mars.tensor
propagate=0

[logger_tornado]
level=WARN
handlers=stream_handler,file_handler
qualname=tornado
propagate=0

[logger_xorbits_core]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits.core
propagate=0

[logger_xorbits_deploy]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits.deploy
propagate=0

[logger_xorbits_numpy]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits.numpy
propagate=0

[logger_xorbits_pandas]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits.pandas
propagate=0

[logger_xorbits_remote]
level=DEBUG
handlers=stream_handler,file_handler
qualname=xorbits.remote
propagate=0

[logger_xorbits_web]
level=WARN
handlers=stream_handler,file_handler
qualname=xorbits.web
propagate=0

[handler_stream_handler]
class=StreamHandler
formatter=formatter
level=WARN
args=(sys.stderr,)

[handler_file_handler]
class=logging.handlers.RotatingFileHandler
formatter=formatter
level=DEBUG
args=('/path/to/logs/xorbits.log',)
kwargs={'mode': 'a', 'maxBytes': 104857600, 'backupCount': 30}

[formatter_formatter]
format=%(asctime)s %(name)-12s %(process)d %(levelname)-8s %(message)s