diff --git a/.changes/re-export-log.md b/.changes/re-export-log.md new file mode 100644 index 0000000000..87e57d5b24 --- /dev/null +++ b/.changes/re-export-log.md @@ -0,0 +1,6 @@ +--- +"log": minor +"log-js": minor +--- + +Re-export the log crate. diff --git a/plugins/log/src/commands.rs b/plugins/log/src/commands.rs new file mode 100644 index 0000000000..c402db76ea --- /dev/null +++ b/plugins/log/src/commands.rs @@ -0,0 +1,73 @@ +// Copyright 2019-2023 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +use std::collections::HashMap; + +use log::RecordBuilder; + +use crate::{LogLevel, WEBVIEW_TARGET}; + +#[tauri::command] +pub fn log( + level: LogLevel, + message: String, + location: Option<&str>, + file: Option<&str>, + line: Option, + key_values: Option>, +) { + let level = log::Level::from(level); + + let target = if let Some(location) = location { + format!("{WEBVIEW_TARGET}:{location}") + } else { + WEBVIEW_TARGET.to_string() + }; + + let mut builder = RecordBuilder::new(); + builder.level(level).target(&target).file(file).line(line); + + let key_values = key_values.unwrap_or_default(); + let mut kv = HashMap::new(); + for (k, v) in key_values.iter() { + kv.insert(k.as_str(), v.as_str()); + } + builder.key_values(&kv); + #[cfg(feature = "tracing")] + emit_trace(level, &message, location, file, line, &kv); + + log::logger().log(&builder.args(format_args!("{message}")).build()); +} + +// Target becomes default and location is added as a parameter +#[cfg(feature = "tracing")] +fn emit_trace( + level: log::Level, + message: &String, + location: Option<&str>, + file: Option<&str>, + line: Option, + kv: &HashMap<&str, &str>, +) { + macro_rules! emit_event { + ($level:expr) => { + tracing::event!( + target: WEBVIEW_TARGET, + $level, + message = %message, + location = location, + file, + line, + ?kv + ) + }; + } + match level { + log::Level::Error => emit_event!(tracing::Level::ERROR), + log::Level::Warn => emit_event!(tracing::Level::WARN), + log::Level::Info => emit_event!(tracing::Level::INFO), + log::Level::Debug => emit_event!(tracing::Level::DEBUG), + log::Level::Trace => emit_event!(tracing::Level::TRACE), + } +} diff --git a/plugins/log/src/lib.rs b/plugins/log/src/lib.rs index de5c5d54e1..c0642d4178 100644 --- a/plugins/log/src/lib.rs +++ b/plugins/log/src/lib.rs @@ -10,12 +10,10 @@ )] use fern::{Filter, FormatCallback}; -use log::{logger, RecordBuilder}; use log::{LevelFilter, Record}; use serde::Serialize; use serde_repr::{Deserialize_repr, Serialize_repr}; use std::borrow::Cow; -use std::collections::HashMap; use std::{ fmt::Arguments, fs::{self, File}, @@ -30,6 +28,9 @@ use tauri::{AppHandle, Emitter}; use time::{macros::format_description, OffsetDateTime}; pub use fern; +pub use log; + +mod commands; pub const WEBVIEW_TARGET: &str = "webview"; @@ -206,70 +207,6 @@ impl Target { } } -// Target becomes default and location is added as a parameter -#[cfg(feature = "tracing")] -fn emit_trace( - level: log::Level, - message: &String, - location: Option<&str>, - file: Option<&str>, - line: Option, - kv: &HashMap<&str, &str>, -) { - macro_rules! emit_event { - ($level:expr) => { - tracing::event!( - target: WEBVIEW_TARGET, - $level, - message = %message, - location = location, - file, - line, - ?kv - ) - }; - } - match level { - log::Level::Error => emit_event!(tracing::Level::ERROR), - log::Level::Warn => emit_event!(tracing::Level::WARN), - log::Level::Info => emit_event!(tracing::Level::INFO), - log::Level::Debug => emit_event!(tracing::Level::DEBUG), - log::Level::Trace => emit_event!(tracing::Level::TRACE), - } -} - -#[tauri::command] -fn log( - level: LogLevel, - message: String, - location: Option<&str>, - file: Option<&str>, - line: Option, - key_values: Option>, -) { - let level = log::Level::from(level); - - let target = if let Some(location) = location { - format!("{WEBVIEW_TARGET}:{location}") - } else { - WEBVIEW_TARGET.to_string() - }; - - let mut builder = RecordBuilder::new(); - builder.level(level).target(&target).file(file).line(line); - - let key_values = key_values.unwrap_or_default(); - let mut kv = HashMap::new(); - for (k, v) in key_values.iter() { - kv.insert(k.as_str(), v.as_str()); - } - builder.key_values(&kv); - #[cfg(feature = "tracing")] - emit_trace(level, &message, location, file, line, &kv); - - logger().log(&builder.args(format_args!("{message}")).build()); -} - pub struct Builder { dispatch: fern::Dispatch, rotation_strategy: RotationStrategy, @@ -528,7 +465,7 @@ impl Builder { } fn plugin_builder() -> plugin::Builder { - plugin::Builder::new("log").invoke_handler(tauri::generate_handler![log]) + plugin::Builder::new("log").invoke_handler(tauri::generate_handler![commands::log]) } #[allow(clippy::type_complexity)]