|
pyo3-logは、Rustのlogクレートによるログ出力をPythonのloggingモジュールに渡すクレート(ライブラリー)。
pyo3-logを使えば、出力するログレベルやフォーマット等をPythonのlogging側で制御できる。
が、RustのlogクレートではTRACEログが出せるが、Pythonのlogging(の標準)にはDEBUGまでしか無い。
pyo3-logのデフォルトではTRACEログは出力されない。
ただし、pyo3-logのロガー初期化時にTRACEログを出力する設定をすれば、loggingのログレベル5で出力できる。
(Pythonのloggingでは、DEBUGが10、INFOが20)
〜 [dependencies] log = "0.4.29" pyo3 = "0.27.2" pyo3-log = "0.13.3"
use pyo3::exceptions::PyRuntimeError;
use log::{debug, error, info, trace, warn};
#[pyfunction]
fn log_example(py: Python) -> PyResult<()> {
// pyo3_log::init();
pyo3_log::Logger::new(py, pyo3_log::Caching::LoggersAndLevels)?
.filter(log::LevelFilter::Trace)
.install()
.map_err(|e| PyRuntimeError::new_err(format!("Failed to initialize logger: {}", e)))?;
trace!("trace log");
debug!("debug log");
info!("info log");
warn!("warn log");
error!("error log");
Ok(())
}
import logging
import example_pyo3
def main():
# logging.basicConfig(level=logging.INFO)
logging.basicConfig(level=5) # TRACE
example_pyo3.log_example()
if __name__ == "__main__":
main()