diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2023-02-03 08:27:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-03 08:27:31 -0500 |
commit | 8e9fc28c6aff6bb1aa960dfde4f9736fee1ae4fb (patch) | |
tree | 029fbdf0db2b55a95cb44fabe42819ca101c08f4 /rust | |
parent | Skip unused calculations in sync handler. (#14908) (diff) | |
download | synapse-8e9fc28c6aff6bb1aa960dfde4f9736fee1ae4fb.tar.xz |
Reload the pyo3-log config when the Python logging config changes. (#14976)
Since pyo3-log is initialized very early in the Python start-up it caches the state of the loggers before they're fully initialized (and thus are essentially disabled). Whenever we reload the logging configuration we now also tell pyo3-log to discard any cached logging configuration it has; it will refetch the current logging configuration from Python at the next point it logs. This fixes Rust log lines not appearing in the homeserver logs.
Diffstat (limited to '')
-rw-r--r-- | rust/src/lib.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/rust/src/lib.rs b/rust/src/lib.rs index c7b60e58a7..ce67f58611 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1,7 +1,13 @@ +use lazy_static::lazy_static; use pyo3::prelude::*; +use pyo3_log::ResetHandle; pub mod push; +lazy_static! { + static ref LOGGING_HANDLE: ResetHandle = pyo3_log::init(); +} + /// Returns the hash of all the rust source files at the time it was compiled. /// /// Used by python to detect if the rust library is outdated. @@ -17,13 +23,20 @@ fn sum_as_string(a: usize, b: usize) -> PyResult<String> { Ok((a + b).to_string()) } +/// Reset the cached logging configuration of pyo3-log to pick up any changes +/// in the Python logging configuration. +/// +#[pyfunction] +fn reset_logging_config() { + LOGGING_HANDLE.reset(); +} + /// The entry point for defining the Python module. #[pymodule] fn synapse_rust(py: Python<'_>, m: &PyModule) -> PyResult<()> { - pyo3_log::init(); - m.add_function(wrap_pyfunction!(sum_as_string, m)?)?; m.add_function(wrap_pyfunction!(get_rust_file_digest, m)?)?; + m.add_function(wrap_pyfunction!(reset_logging_config, m)?)?; push::register_module(py, m)?; |