@@ -5,17 +5,16 @@ mod ext;
55pub use errors:: * ;
66pub use ext:: * ;
77
8+ use std:: { fs, path:: PathBuf } ;
9+ use tauri:: Manager ;
10+
11+ use tracing_appender:: { non_blocking:: WorkerGuard , rolling} ;
812use tracing_subscriber:: {
913 fmt, prelude:: __tracing_subscriber_SubscriberExt, util:: SubscriberInitExt , EnvFilter ,
1014} ;
1115
1216const PLUGIN_NAME : & str = "tracing" ;
1317
14- pub type ManagedState = std:: sync:: Mutex < State > ;
15-
16- #[ derive( Default ) ]
17- pub struct State { }
18-
1918fn make_specta_builder ( ) -> tauri_specta:: Builder < tauri:: Wry > {
2019 tauri_specta:: Builder :: < tauri:: Wry > :: new ( )
2120 . plugin_name ( PLUGIN_NAME )
@@ -32,15 +31,25 @@ pub fn init() -> tauri::plugin::TauriPlugin<tauri::Wry> {
3231 . setup ( move |app, _api| {
3332 specta_builder. mount_events ( app) ;
3433
35- {
36- let env_filter = EnvFilter :: try_from_default_env ( )
37- . unwrap_or_else ( |_| EnvFilter :: new ( "info" ) )
38- . add_directive ( "ort=warn" . parse ( ) . unwrap ( ) ) ;
34+ let env_filter = EnvFilter :: try_from_default_env ( )
35+ . unwrap_or_else ( |_| EnvFilter :: new ( "info" ) )
36+ . add_directive ( "ort=warn" . parse ( ) . unwrap ( ) ) ;
37+
38+ let bundle_id = app. config ( ) . identifier . clone ( ) ;
3939
40+ if let Some ( ( file_writer, guard) ) = make_file_writer_if_enabled ( true , & bundle_id) {
4041 tracing_subscriber:: Registry :: default ( )
42+ . with ( env_filter)
43+ . with ( tauri_plugin_sentry:: sentry:: integrations:: tracing:: layer ( ) )
4144 . with ( fmt:: layer ( ) )
45+ . with ( fmt:: layer ( ) . with_ansi ( false ) . with_writer ( file_writer) )
46+ . init ( ) ;
47+ assert ! ( app. manage( guard) ) ;
48+ } else {
49+ tracing_subscriber:: Registry :: default ( )
4250 . with ( env_filter)
4351 . with ( tauri_plugin_sentry:: sentry:: integrations:: tracing:: layer ( ) )
52+ . with ( fmt:: layer ( ) )
4453 . init ( ) ;
4554 }
4655
@@ -49,6 +58,29 @@ pub fn init() -> tauri::plugin::TauriPlugin<tauri::Wry> {
4958 . build ( )
5059}
5160
61+ fn make_file_writer_if_enabled (
62+ enabled : bool ,
63+ bundle_identifier : & str ,
64+ ) -> Option < ( tracing_appender:: non_blocking:: NonBlocking , WorkerGuard ) > {
65+ if !enabled {
66+ return None ;
67+ }
68+
69+ let base_dir: PathBuf = match dirs:: data_dir ( ) {
70+ Some ( p) => p,
71+ None => return None ,
72+ } ;
73+
74+ let logs_dir = base_dir. join ( bundle_identifier) . join ( "logs" ) ;
75+ if let Err ( _e) = fs:: create_dir_all ( & logs_dir) {
76+ return None ;
77+ }
78+
79+ let file_appender = rolling:: daily ( & logs_dir, "log.txt" ) ;
80+ let ( non_blocking, guard) = tracing_appender:: non_blocking ( file_appender) ;
81+ Some ( ( non_blocking, guard) )
82+ }
83+
5284#[ cfg( test) ]
5385mod test {
5486 use super :: * ;
0 commit comments