mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-04-29 12:06:01 +02:00
feat(log): Add skip_logger setting (#2377)
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'log': 'minor:feat'
|
||||
'log-js': 'minor:feat'
|
||||
---
|
||||
Add a `is_skip_logger` flag to the Log Plugin `Builder` struct, a `skip_logger()` method to the Builder, and logic to avoid acquiring (creating) a logger and attaching it to the global logger. Since acquire_logger is pub, a `LoggerNotInitialized` is added and returned if it's called when the `is_skip_looger` flag is set. Overall, this feature permits a user to avoid calling `attach_logger` which can only be called once in a program's lifetime and allows the user to control the logger returned from `logger()`. Additionally, it also will allow users to generate multiple Tauri Mock apps in test suites that run and parallel and have the `log` plugin attached (assuming they use `skip_logger()`).
|
||||
+34
-11
@@ -58,6 +58,8 @@ pub enum Error {
|
||||
TimeFormat(#[from] time::error::Format),
|
||||
#[error(transparent)]
|
||||
InvalidFormatDescription(#[from] time::error::InvalidFormatDescription),
|
||||
#[error("Internal logger disabled and cannot be acquired or attached")]
|
||||
LoggerNotInitialized,
|
||||
}
|
||||
|
||||
/// An enum representing the available verbosity levels of the logger.
|
||||
@@ -230,6 +232,7 @@ pub struct Builder {
|
||||
timezone_strategy: TimezoneStrategy,
|
||||
max_file_size: u128,
|
||||
targets: Vec<Target>,
|
||||
is_skip_logger: bool,
|
||||
}
|
||||
|
||||
impl Default for Builder {
|
||||
@@ -258,6 +261,7 @@ impl Default for Builder {
|
||||
timezone_strategy: DEFAULT_TIMEZONE_STRATEGY,
|
||||
max_file_size: DEFAULT_MAX_FILE_SIZE,
|
||||
targets: DEFAULT_LOG_TARGETS.into(),
|
||||
is_skip_logger: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -339,6 +343,22 @@ impl Builder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Skip the creation and global registration of a logger
|
||||
///
|
||||
/// If you wish to use your own global logger, you must call `skip_logger` so that the plugin does not attempt to set a second global logger. In this configuration, no logger will be created and the plugin's `log` command will rely on the result of `log::logger()`. You will be responsible for configuring the logger yourself and any included targets will be ignored. This can also be used with `tracing-log` or if running tests in parallel that require the plugin to be registered.
|
||||
/// ```rust
|
||||
/// static LOGGER: SimpleLogger = SimpleLogger;
|
||||
///
|
||||
/// log::set_logger(&SimpleLogger)?;
|
||||
/// log::set_max_level(LevelFilter::Info);
|
||||
/// tauri_plugin_log::Builder::new()
|
||||
/// .skip_logger();
|
||||
/// ```
|
||||
pub fn skip_logger(mut self) -> Self {
|
||||
self.is_skip_logger = true;
|
||||
self
|
||||
}
|
||||
|
||||
/// Adds a collection of targets to the logger.
|
||||
///
|
||||
/// ```rust
|
||||
@@ -481,6 +501,9 @@ impl Builder {
|
||||
self,
|
||||
app_handle: &AppHandle<R>,
|
||||
) -> Result<(TauriPlugin<R>, log::LevelFilter, Box<dyn log::Log>), Error> {
|
||||
if self.is_skip_logger {
|
||||
return Err(Error::LoggerNotInitialized);
|
||||
}
|
||||
let plugin = Self::plugin_builder();
|
||||
let (max_level, log) = Self::acquire_logger(
|
||||
app_handle,
|
||||
@@ -497,17 +520,17 @@ impl Builder {
|
||||
pub fn build<R: Runtime>(self) -> TauriPlugin<R> {
|
||||
Self::plugin_builder()
|
||||
.setup(move |app_handle, _api| {
|
||||
let (max_level, log) = Self::acquire_logger(
|
||||
app_handle,
|
||||
self.dispatch,
|
||||
self.rotation_strategy,
|
||||
self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
self.targets,
|
||||
)?;
|
||||
|
||||
attach_logger(max_level, log)?;
|
||||
|
||||
if !self.is_skip_logger {
|
||||
let (max_level, log) = Self::acquire_logger(
|
||||
app_handle,
|
||||
self.dispatch,
|
||||
self.rotation_strategy,
|
||||
self.timezone_strategy,
|
||||
self.max_file_size,
|
||||
self.targets,
|
||||
)?;
|
||||
attach_logger(max_level, log)?;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
.build()
|
||||
|
||||
Reference in New Issue
Block a user