diff --git a/.idea/appflowy_client.iml b/.idea/appflowy_client.iml
index 12b5c938f9..94f61ad366 100644
--- a/.idea/appflowy_client.iml
+++ b/.idea/appflowy_client.iml
@@ -8,6 +8,7 @@
+
diff --git a/rust-lib/Cargo.toml b/rust-lib/Cargo.toml
index 5d0ec862f2..3424af727f 100644
--- a/rust-lib/Cargo.toml
+++ b/rust-lib/Cargo.toml
@@ -3,6 +3,7 @@ members = [
"flowy-sys",
"flowy-sdk",
"dart-ffi",
+ "flowy-log",
]
[profile.dev]
diff --git a/rust-lib/flowy-log/Cargo.toml b/rust-lib/flowy-log/Cargo.toml
new file mode 100644
index 0000000000..957bde80c1
--- /dev/null
+++ b/rust-lib/flowy-log/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "flowy-log"
+version = "0.1.0"
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+tracing = { version = "0.1", features = ["log"] }
+tracing-log = "0.1.1"
+tracing-futures = "0.2.4"
+tracing-subscriber = { version = "0.2.12", features = ["registry", "env-filter"] }
+tracing-bunyan-formatter = "0.2.2"
+log = "0.4.14"
\ No newline at end of file
diff --git a/rust-lib/flowy-log/src/lib.rs b/rust-lib/flowy-log/src/lib.rs
new file mode 100644
index 0000000000..d402821c00
--- /dev/null
+++ b/rust-lib/flowy-log/src/lib.rs
@@ -0,0 +1,35 @@
+use log::SetLoggerError;
+use tracing::subscriber::set_global_default;
+use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
+use tracing_log::LogTracer;
+use tracing_subscriber::{layer::SubscriberExt, EnvFilter};
+
+pub fn init_log(name: &str, env_filter: &str) -> std::Result<(), SetLoggerError> {
+ let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(env_filter.to_owned()));
+ let formatting_layer = BunyanFormattingLayer::new(name.to_owned(), std::io::stdout);
+ let subscriber = tracing_subscriber::fmt()
+ .with_target(false)
+ .with_thread_ids(false)
+ .with_target(false)
+ .compact()
+ .finish()
+ .with(env_filter)
+ .with(JsonStorageLayer)
+ .with(formatting_layer);
+
+ let _ = LogTracer::init()?;
+ let _ = set_global_default(subscriber)?;
+ Ok(())
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_log() {
+ init_log("flowy-log", "info");
+ tracing::info!("😁 Tracing info log");
+ log::info!("😁 bridge 'log' to 'tracing'");
+ }
+}