Merge pull request #96 from tauri-apps/feat/mobile-log

feat(log): implement mobile logging
pull/125/head
Jonas Kruckenberg 2 years ago committed by GitHub
commit 37e0511020
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

105
Cargo.lock generated

@ -86,14 +86,14 @@ checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e"
[[package]] [[package]]
name = "android_logger" name = "android_logger"
version = "0.9.2" version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ec2333c185d826313162cee39d3fcc6a84ba08114a839bebf53b961e7e75773" checksum = "8619b80c242aa7bd638b5c7ddd952addeecb71f69c75e33f1d47b2804f8f883a"
dependencies = [ dependencies = [
"android_log-sys", "android_log-sys",
"env_logger 0.7.1", "env_logger",
"lazy_static",
"log", "log",
"once_cell",
] ]
[[package]] [[package]]
@ -956,6 +956,19 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "dashmap"
version = "5.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
dependencies = [
"cfg-if 1.0.0",
"hashbrown",
"lock_api",
"once_cell",
"parking_lot_core 0.9.6",
]
[[package]] [[package]]
name = "der" name = "der"
version = "0.5.1" version = "0.5.1"
@ -1153,25 +1166,12 @@ dependencies = [
[[package]] [[package]]
name = "env_logger" name = "env_logger"
version = "0.7.1" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
dependencies = [
"log",
"regex",
]
[[package]]
name = "env_logger"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [ dependencies = [
"atty",
"humantime",
"log", "log",
"regex", "regex",
"termcolor",
] ]
[[package]] [[package]]
@ -1882,12 +1882,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "hyper" name = "hyper"
version = "0.14.23" version = "0.14.23"
@ -1977,10 +1971,11 @@ dependencies = [
[[package]] [[package]]
name = "ignore" name = "ignore"
version = "0.4.19" version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a05705bc64e0b66a806c3740bd6578ea66051b157ec42dc219c785cbf185aef3" checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
dependencies = [ dependencies = [
"crossbeam-utils",
"globset", "globset",
"lazy_static", "lazy_static",
"log", "log",
@ -2848,6 +2843,17 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "oslog"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969"
dependencies = [
"cc",
"dashmap",
"log",
]
[[package]] [[package]]
name = "overload" name = "overload"
version = "0.1.1" version = "0.1.1"
@ -4229,9 +4235,9 @@ dependencies = [
[[package]] [[package]]
name = "tao" name = "tao"
version = "0.15.8" version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6" checksum = "704522803dda895767f69198af8351b0a3f4fe2e293c3ca54cce0ecba05a97f2"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@ -4263,11 +4269,11 @@ dependencies = [
"objc", "objc",
"once_cell", "once_cell",
"parking_lot 0.12.1", "parking_lot 0.12.1",
"paste",
"png", "png",
"raw-window-handle", "raw-window-handle",
"scopeguard", "scopeguard",
"serde", "serde",
"tao-macros",
"unicode-segmentation", "unicode-segmentation",
"uuid 1.2.2", "uuid 1.2.2",
"windows 0.39.0", "windows 0.39.0",
@ -4275,6 +4281,17 @@ dependencies = [
"x11-dl", "x11-dl",
] ]
[[package]]
name = "tao-macros"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b6fcd8245d45a39ffc8715183d92ae242750eb57b285eb3bcd63dfd512afd09"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "tar" name = "tar"
version = "0.4.38" version = "0.4.38"
@ -4289,17 +4306,14 @@ dependencies = [
[[package]] [[package]]
name = "tauri" name = "tauri"
version = "2.0.0-alpha.2" version = "2.0.0-alpha.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "c8dca2d7a5853ab98d1453bf74078308f175634934e2fd1f427433c56c179da5"
dependencies = [ dependencies = [
"android_logger",
"anyhow", "anyhow",
"attohttpc", "attohttpc",
"cocoa", "cocoa",
"dirs-next", "dirs-next",
"embed_plist", "embed_plist",
"encoding_rs", "encoding_rs",
"env_logger 0.9.3",
"flate2", "flate2",
"futures-util", "futures-util",
"glib", "glib",
@ -4308,6 +4322,7 @@ dependencies = [
"heck 0.4.0", "heck 0.4.0",
"http", "http",
"ignore", "ignore",
"libc",
"log", "log",
"objc", "objc",
"once_cell", "once_cell",
@ -4339,8 +4354,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-codegen" name = "tauri-codegen"
version = "2.0.0-alpha.0" version = "2.0.0-alpha.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "8e78b01de486c5aefb99d2623d856b3d3afb88499bc9b8514e246762505006c1"
dependencies = [ dependencies = [
"base64 0.13.1", "base64 0.13.1",
"brotli", "brotli",
@ -4365,8 +4379,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-macros" name = "tauri-macros"
version = "2.0.0-alpha.0" version = "2.0.0-alpha.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "df039672c40713ded0f7991efd1d7d6219e008c73137483d6dd2d9988f39472e"
dependencies = [ dependencies = [
"heck 0.4.0", "heck 0.4.0",
"proc-macro2", "proc-macro2",
@ -4447,9 +4460,11 @@ dependencies = [
name = "tauri-plugin-log" name = "tauri-plugin-log"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"android_logger",
"byte-unit", "byte-unit",
"fern", "fern",
"log", "log",
"oslog",
"serde", "serde",
"serde_json", "serde_json",
"serde_repr", "serde_repr",
@ -4582,8 +4597,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime" name = "tauri-runtime"
version = "0.13.0-alpha.0" version = "0.13.0-alpha.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "010bdd6bb6585b647afe262d3e43ec612969f328d32c9ce20f9cfaefccb5e7a9"
dependencies = [ dependencies = [
"gtk", "gtk",
"http", "http",
@ -4602,8 +4616,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime-wry" name = "tauri-runtime-wry"
version = "0.13.0-alpha.0" version = "0.13.0-alpha.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "2dadf5f22694dbb5a1fd9496fe28f48ba4288ed4cb8c2584911a81cd57e24e90"
dependencies = [ dependencies = [
"cocoa", "cocoa",
"gtk", "gtk",
@ -4622,8 +4635,7 @@ dependencies = [
[[package]] [[package]]
name = "tauri-utils" name = "tauri-utils"
version = "2.0.0-alpha.0" version = "2.0.0-alpha.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/tauri?branch=next#630a7f4b18cef169bfd48673609306fec434e397"
checksum = "8c7ee9f908d975a116f2fe3db47d65b18e568aa7913aa333b7a5cd990f179e5e"
dependencies = [ dependencies = [
"brotli", "brotli",
"ctor", "ctor",
@ -5632,9 +5644,8 @@ dependencies = [
[[package]] [[package]]
name = "wry" name = "wry"
version = "0.23.4" version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/tauri-apps/wry?branch=dev#bce39e2be195194e547b0021e770e45a3df15fa1"
checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
dependencies = [ dependencies = [
"base64 0.13.1", "base64 0.13.1",
"block", "block",

@ -15,9 +15,15 @@ serde_json.workspace = true
tauri.workspace = true tauri.workspace = true
serde_repr = "0.1" serde_repr = "0.1"
byte-unit = "4.0" byte-unit = "4.0"
fern = "0.6"
log = { workspace = true, features = ["kv_unstable"] } log = { workspace = true, features = ["kv_unstable"] }
time = { version = "0.3", features = ["formatting"] } time = { version = "0.3", features = ["formatting"] }
fern = "0.6"
[target."cfg(target_os = \"android\")".dependencies]
android_logger = "0.11"
[target."cfg(target_os = \"ios\")".dependencies]
oslog = "0.2"
[features] [features]
colored = ["fern/colored"] colored = ["fern/colored"]

@ -0,0 +1,12 @@
fn alias(alias: &str, has_feature: bool) {
if has_feature {
println!("cargo:rustc-cfg={alias}");
}
}
fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
let mobile = target_os == "ios" || target_os == "android";
alias("desktop", !mobile);
alias("mobile", mobile);
}

@ -151,17 +151,23 @@ pub struct Builder {
impl Default for Builder { impl Default for Builder {
fn default() -> Self { fn default() -> Self {
#[cfg(desktop)]
let format = let format =
time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]") time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]")
.unwrap(); .unwrap();
let dispatch = fern::Dispatch::new().format(move |out, message, record| { let dispatch = fern::Dispatch::new().format(move |out, message, record| {
out.finish(format_args!( out.finish(
#[cfg(mobile)]
format_args!("[{}] {}", record.target(), message),
#[cfg(desktop)]
format_args!(
"{}[{}][{}] {}", "{}[{}][{}] {}",
time::OffsetDateTime::now_utc().format(&format).unwrap(), time::OffsetDateTime::now_utc().format(&format).unwrap(),
record.target(), record.target(),
record.level(), record.level(),
message message
)) ),
)
}); });
Self { Self {
dispatch, dispatch,
@ -247,9 +253,42 @@ impl Builder {
// setup targets // setup targets
for target in &self.targets { for target in &self.targets {
self.dispatch = self.dispatch.chain(match target { let logger = match target {
LogTarget::Stdout => fern::Output::from(std::io::stdout()), #[cfg(target_os = "android")]
LogTarget::Stderr => fern::Output::from(std::io::stderr()), LogTarget::Stdout | LogTarget::Stderr => {
fern::Output::call(android_logger::log)
}
#[cfg(target_os = "ios")]
LogTarget::Stdout | LogTarget::Stderr => {
use std::sync::Mutex;
let loggers: Mutex<HashMap<String, oslog::OsLog>> = Default::default();
let mut subsystem = String::new();
let identifier = &app_handle.config().tauri.bundle.identifier;
let s = identifier.split('.');
let last = s.clone().count() - 1;
for (i, w) in s.enumerate() {
if i != last {
subsystem.push_str(w);
subsystem.push('.');
}
}
subsystem.push_str(&app_handle.package_info().crate_name);
fern::Output::call(move |record| {
let mut loggers = loggers.lock().unwrap();
let pair =
loggers.entry(record.target().into()).or_insert_with(|| {
oslog::OsLog::new(&subsystem, record.target())
});
let message = format!("{}", record.args());
(*pair).with_level(record.level().into(), &message);
})
}
#[cfg(desktop)]
LogTarget::Stdout => std::io::stdout().into(),
#[cfg(desktop)]
LogTarget::Stderr => std::io::stderr().into(),
LogTarget::Folder(path) => { LogTarget::Folder(path) => {
if !path.exists() { if !path.exists() {
fs::create_dir_all(path).unwrap(); fs::create_dir_all(path).unwrap();
@ -263,6 +302,9 @@ impl Builder {
)?)? )?)?
.into() .into()
} }
#[cfg(mobile)]
LogTarget::LogDir => continue,
#[cfg(desktop)]
LogTarget::LogDir => { LogTarget::LogDir => {
let path = app_handle.path_resolver().app_log_dir().unwrap(); let path = app_handle.path_resolver().app_log_dir().unwrap();
if !path.exists() { if !path.exists() {
@ -291,7 +333,8 @@ impl Builder {
}); });
}) })
} }
}); };
self.dispatch = self.dispatch.chain(logger);
} }
self.dispatch.apply()?; self.dispatch.apply()?;

Loading…
Cancel
Save