S-JIS[2026-03-25]

Rust pyo3-logメモ

Rustpyo3のpyo3-logクレートのメモ。


概要

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)


Cargo.toml:

〜

[dependencies]
log = "0.4.29"
pyo3 = "0.27.2"
pyo3-log = "0.13.3"

src/lib.rs:

    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(())
    }

examples/log_example.py:

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()

pyo3へ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま