@@ -5,6 +5,8 @@ use pop_launcher_toolkit::plugins;
5
5
use pop_launcher_toolkit:: service;
6
6
7
7
use mimalloc:: MiMalloc ;
8
+ use tracing_subscriber:: layer:: SubscriberExt ;
9
+ use tracing_subscriber:: EnvFilter ;
8
10
9
11
#[ global_allocator]
10
12
static GLOBAL : MiMalloc = MiMalloc ;
@@ -37,7 +39,10 @@ async fn main() {
37
39
}
38
40
}
39
41
42
+ // todo: support journald once this issue is resolved: https://github.com/tokio-rs/tracing/issues/2348
40
43
fn init_logging ( cmd : & str ) {
44
+ use tracing_subscriber:: { fmt, Registry } ;
45
+
41
46
let logdir = match dirs:: state_dir ( ) {
42
47
Some ( dir) => dir. join ( "pop-launcher/" ) ,
43
48
None => dirs:: home_dir ( )
@@ -49,15 +54,27 @@ fn init_logging(cmd: &str) {
49
54
50
55
let logfile = std:: fs:: OpenOptions :: new ( )
51
56
. create ( true )
52
- . truncate ( true )
53
- . write ( true )
57
+ . append ( true )
54
58
. open ( logdir. join ( [ cmd, ".log" ] . concat ( ) . as_str ( ) ) . as_path ( ) ) ;
55
59
56
60
if let Ok ( file) = logfile {
57
- use tracing_subscriber:: { fmt, EnvFilter } ;
58
- fmt ( )
59
- . with_env_filter ( EnvFilter :: from_default_env ( ) )
60
- . with_writer ( file)
61
- . init ( ) ;
61
+ if let Ok ( meta) = file. metadata ( ) {
62
+ if meta. len ( ) > 1000 {
63
+ let _ = file. set_len ( 0 ) ;
64
+ }
65
+ }
66
+
67
+ let filter_layer = EnvFilter :: try_from_default_env ( )
68
+ . or_else ( |_| EnvFilter :: try_new ( "warn" ) )
69
+ . unwrap ( ) ;
70
+
71
+ let fmt_layer = fmt:: layer ( )
72
+ . with_target ( false )
73
+ . with_timer ( fmt:: time:: ChronoLocal :: new ( "%T" . into ( ) ) )
74
+ . with_writer ( file) ;
75
+
76
+ let subscriber = Registry :: default ( ) . with ( filter_layer) . with ( fmt_layer) ;
77
+
78
+ tracing:: subscriber:: set_global_default ( subscriber) . expect ( "Failed to set subscriber" ) ;
62
79
}
63
80
}
0 commit comments