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

@ -15,9 +15,15 @@ serde_json.workspace = true
tauri.workspace = true
serde_repr = "0.1"
byte-unit = "4.0"
fern = "0.6"
log = { workspace = true, features = ["kv_unstable"] }
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]
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 {
fn default() -> Self {
#[cfg(desktop)]
let format =
time::format_description::parse("[[[year]-[month]-[day]][[[hour]:[minute]:[second]]")
.unwrap();
let dispatch = fern::Dispatch::new().format(move |out, message, record| {
out.finish(format_args!(
"{}[{}][{}] {}",
time::OffsetDateTime::now_utc().format(&format).unwrap(),
record.target(),
record.level(),
message
))
out.finish(
#[cfg(mobile)]
format_args!("[{}] {}", record.target(), message),
#[cfg(desktop)]
format_args!(
"{}[{}][{}] {}",
time::OffsetDateTime::now_utc().format(&format).unwrap(),
record.target(),
record.level(),
message
),
)
});
Self {
dispatch,
@ -247,9 +253,42 @@ impl Builder {
// setup targets
for target in &self.targets {
self.dispatch = self.dispatch.chain(match target {
LogTarget::Stdout => fern::Output::from(std::io::stdout()),
LogTarget::Stderr => fern::Output::from(std::io::stderr()),
let logger = match target {
#[cfg(target_os = "android")]
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) => {
if !path.exists() {
fs::create_dir_all(path).unwrap();
@ -263,6 +302,9 @@ impl Builder {
)?)?
.into()
}
#[cfg(mobile)]
LogTarget::LogDir => continue,
#[cfg(desktop)]
LogTarget::LogDir => {
let path = app_handle.path_resolver().app_log_dir().unwrap();
if !path.exists() {
@ -291,7 +333,8 @@ impl Builder {
});
})
}
});
};
self.dispatch = self.dispatch.chain(logger);
}
self.dispatch.apply()?;

Loading…
Cancel
Save