1
1
use std:: env:: { self , args} ;
2
2
use std:: ffi:: CString ;
3
- use std:: fs:: create_dir_all;
4
3
use std:: io:: { self , IsTerminal , stderr, stdin} ;
5
4
use std:: path:: { Path , PathBuf } ;
6
5
7
6
use std:: process:: { Command , exit} ;
8
7
9
8
use std:: sync:: Arc ;
10
9
use std:: sync:: { LazyLock , OnceLock } ;
11
- use std:: time:: { Duration , SystemTime , UNIX_EPOCH } ;
10
+ use std:: time:: Duration ;
12
11
13
12
mod args;
14
13
mod config;
@@ -240,20 +239,21 @@ fn init_localizer() {
240
239
241
240
fn init_logger (
242
241
oma : & OhManagerAilurus ,
243
- _config : & Config ,
242
+ config : & Config ,
244
243
) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
245
244
let debug = oma. global . debug ;
246
245
let dry_run = oma. global . dry_run ;
247
246
248
- let log_dir = if is_root ( ) {
247
+ let log_file = ( if is_root ( ) {
249
248
PathBuf :: from ( "/var/log/oma" )
250
249
} else {
251
250
dirs:: state_dir ( )
252
251
. expect ( "Failed to get state dir" )
253
252
. join ( "oma" )
254
- } ;
255
-
256
- let log_file = create_log_file ( & log_dir) ;
253
+ } )
254
+ . join ( "oma.log" )
255
+ . to_string_lossy ( )
256
+ . to_string ( ) ;
257
257
258
258
let ( level_filter, formatter) = if !debug && !dry_run {
259
259
let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -272,24 +272,20 @@ fn init_logger(
272
272
( level_filter, formatter)
273
273
} ;
274
274
275
- let rotating_sink = if let Ok ( log_file) = & log_file {
276
- Some (
277
- AsyncPoolSink :: builder ( )
278
- . sink ( Arc :: new (
279
- RotatingFileSink :: builder ( )
280
- . base_path ( & log_file)
281
- . formatter ( formatter. clone ( ) )
282
- . rotation_policy ( RotationPolicy :: Hourly )
283
- . build ( )
284
- . unwrap ( ) ,
285
- ) )
286
- . overflow_policy ( spdlog:: sink:: OverflowPolicy :: DropIncoming )
275
+ let rotating_sink = AsyncPoolSink :: builder ( )
276
+ . sink ( Arc :: new (
277
+ RotatingFileSink :: builder ( )
278
+ . base_path ( & log_file)
279
+ . formatter ( formatter. clone ( ) )
280
+ // 10 MB
281
+ . rotation_policy ( RotationPolicy :: FileSize ( 10 * 1024 * 1024 ) )
282
+ . max_files ( config. save_log_count ( ) )
287
283
. build ( )
288
284
. unwrap ( ) ,
289
- )
290
- } else {
291
- None
292
- } ;
285
+ ) )
286
+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
287
+ . build ( )
288
+ . unwrap ( ) ;
293
289
294
290
let stream_sink = StdStreamSink :: builder ( )
295
291
. formatter ( formatter)
@@ -301,33 +297,14 @@ fn init_logger(
301
297
302
298
logger_builder
303
299
. level_filter ( level_filter)
304
- . sink ( Arc :: new ( stream_sink) ) ;
305
-
306
- if let Some ( rotating_sink) = rotating_sink {
307
- logger_builder. sink ( Arc :: new ( rotating_sink) ) ;
308
- }
300
+ . sink ( Arc :: new ( stream_sink) )
301
+ . sink ( Arc :: new ( rotating_sink) ) ;
309
302
310
303
let logger = logger_builder. build ( ) . unwrap ( ) ;
311
304
312
305
set_default_logger ( Arc :: new ( logger) ) ;
313
306
314
- ( Some ( default_logger ( ) ) , log_file)
315
- }
316
-
317
- fn create_log_file ( log_dir : & Path ) -> anyhow:: Result < String > {
318
- create_dir_all ( log_dir) ?;
319
-
320
- let log_file = format ! (
321
- "oma.log.{}" ,
322
- SystemTime :: now( )
323
- . duration_since( UNIX_EPOCH )
324
- . unwrap( )
325
- . as_secs( )
326
- ) ;
327
-
328
- let log_file = log_dir. join ( log_file) . to_string_lossy ( ) . to_string ( ) ;
329
-
330
- Ok ( log_file)
307
+ ( Some ( default_logger ( ) ) , Ok ( log_file) )
331
308
}
332
309
333
310
#[ inline]
0 commit comments