日志#
本文介绍 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