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;
@@ -285,20 +284,21 @@ fn init_localizer() {
285
284
286
285
fn init_logger (
287
286
oma : & OhManagerAilurus ,
288
- _config : & Config ,
287
+ config : & Config ,
289
288
) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
290
289
let debug = oma. global . debug ;
291
290
let dry_run = oma. global . dry_run ;
292
291
293
- let log_dir = if is_root ( ) {
292
+ let log_file = ( if is_root ( ) {
294
293
PathBuf :: from ( "/var/log/oma" )
295
294
} else {
296
295
dirs:: state_dir ( )
297
296
. expect ( "Failed to get state dir" )
298
297
. join ( "oma" )
299
- } ;
300
-
301
- let log_file = create_log_file ( & log_dir) ;
298
+ } )
299
+ . join ( "oma.log" )
300
+ . to_string_lossy ( )
301
+ . to_string ( ) ;
302
302
303
303
let ( level_filter, formatter) = if !debug && !dry_run {
304
304
let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -317,24 +317,20 @@ fn init_logger(
317
317
( level_filter, formatter)
318
318
} ;
319
319
320
- let rotating_sink = if let Ok ( log_file) = & log_file {
321
- Some (
322
- AsyncPoolSink :: builder ( )
323
- . sink ( Arc :: new (
324
- RotatingFileSink :: builder ( )
325
- . base_path ( & log_file)
326
- . formatter ( formatter. clone ( ) )
327
- . rotation_policy ( RotationPolicy :: Hourly )
328
- . build ( )
329
- . unwrap ( ) ,
330
- ) )
331
- . overflow_policy ( spdlog:: sink:: OverflowPolicy :: DropIncoming )
320
+ let rotating_sink = AsyncPoolSink :: builder ( )
321
+ . sink ( Arc :: new (
322
+ RotatingFileSink :: builder ( )
323
+ . base_path ( & log_file)
324
+ . formatter ( formatter. clone ( ) )
325
+ // 10 MB
326
+ . rotation_policy ( RotationPolicy :: FileSize ( 10 * 1024 * 1024 ) )
327
+ . max_files ( config. save_log_count ( ) )
332
328
. build ( )
333
329
. unwrap ( ) ,
334
- )
335
- } else {
336
- None
337
- } ;
330
+ ) )
331
+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
332
+ . build ( )
333
+ . unwrap ( ) ;
338
334
339
335
let stream_sink = StdStreamSink :: builder ( )
340
336
. formatter ( formatter)
@@ -346,33 +342,14 @@ fn init_logger(
346
342
347
343
logger_builder
348
344
. level_filter ( level_filter)
349
- . sink ( Arc :: new ( stream_sink) ) ;
350
-
351
- if let Some ( rotating_sink) = rotating_sink {
352
- logger_builder. sink ( Arc :: new ( rotating_sink) ) ;
353
- }
345
+ . sink ( Arc :: new ( stream_sink) )
346
+ . sink ( Arc :: new ( rotating_sink) ) ;
354
347
355
348
let logger = logger_builder. build ( ) . unwrap ( ) ;
356
349
357
350
set_default_logger ( Arc :: new ( logger) ) ;
358
351
359
- ( Some ( default_logger ( ) ) , log_file)
360
- }
361
-
362
- fn create_log_file ( log_dir : & Path ) -> anyhow:: Result < String > {
363
- create_dir_all ( log_dir) ?;
364
-
365
- let log_file = format ! (
366
- "oma.log.{}" ,
367
- SystemTime :: now( )
368
- . duration_since( UNIX_EPOCH )
369
- . unwrap( )
370
- . as_secs( )
371
- ) ;
372
-
373
- let log_file = log_dir. join ( log_file) . to_string_lossy ( ) . to_string ( ) ;
374
-
375
- Ok ( log_file)
352
+ ( Some ( default_logger ( ) ) , Ok ( log_file) )
376
353
}
377
354
378
355
#[ inline]
0 commit comments