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;
@@ -271,20 +270,21 @@ fn init_localizer() {
271
270
272
271
fn init_logger (
273
272
oma : & OhManagerAilurus ,
274
- _config : & Config ,
273
+ config : & Config ,
275
274
) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
276
275
let debug = oma. global . debug ;
277
276
let dry_run = oma. global . dry_run ;
278
277
279
- let log_dir = if is_root ( ) {
278
+ let log_file = ( if is_root ( ) {
280
279
PathBuf :: from ( "/var/log/oma" )
281
280
} else {
282
281
dirs:: state_dir ( )
283
282
. expect ( "Failed to get state dir" )
284
283
. join ( "oma" )
285
- } ;
286
-
287
- let log_file = create_log_file ( & log_dir) ;
284
+ } )
285
+ . join ( "oma.log" )
286
+ . to_string_lossy ( )
287
+ . to_string ( ) ;
288
288
289
289
let ( level_filter, formatter) = if !debug && !dry_run {
290
290
let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -303,24 +303,20 @@ fn init_logger(
303
303
( level_filter, formatter)
304
304
} ;
305
305
306
- let rotating_sink = if let Ok ( log_file) = & log_file {
307
- Some (
308
- AsyncPoolSink :: builder ( )
309
- . sink ( Arc :: new (
310
- RotatingFileSink :: builder ( )
311
- . base_path ( & log_file)
312
- . formatter ( formatter. clone ( ) )
313
- . rotation_policy ( RotationPolicy :: Hourly )
314
- . build ( )
315
- . unwrap ( ) ,
316
- ) )
317
- . overflow_policy ( spdlog:: sink:: OverflowPolicy :: DropIncoming )
306
+ let rotating_sink = AsyncPoolSink :: builder ( )
307
+ . sink ( Arc :: new (
308
+ RotatingFileSink :: builder ( )
309
+ . base_path ( & log_file)
310
+ . formatter ( formatter. clone ( ) )
311
+ // 10 MB
312
+ . rotation_policy ( RotationPolicy :: FileSize ( 10 * 1024 * 1024 ) )
313
+ . max_files ( config. save_log_count ( ) )
318
314
. build ( )
319
315
. unwrap ( ) ,
320
- )
321
- } else {
322
- None
323
- } ;
316
+ ) )
317
+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
318
+ . build ( )
319
+ . unwrap ( ) ;
324
320
325
321
let stream_sink = StdStreamSink :: builder ( )
326
322
. formatter ( formatter)
@@ -332,33 +328,14 @@ fn init_logger(
332
328
333
329
logger_builder
334
330
. level_filter ( level_filter)
335
- . sink ( Arc :: new ( stream_sink) ) ;
336
-
337
- if let Some ( rotating_sink) = rotating_sink {
338
- logger_builder. sink ( Arc :: new ( rotating_sink) ) ;
339
- }
331
+ . sink ( Arc :: new ( stream_sink) )
332
+ . sink ( Arc :: new ( rotating_sink) ) ;
340
333
341
334
let logger = logger_builder. build ( ) . unwrap ( ) ;
342
335
343
336
set_default_logger ( Arc :: new ( logger) ) ;
344
337
345
- ( Some ( default_logger ( ) ) , log_file)
346
- }
347
-
348
- fn create_log_file ( log_dir : & Path ) -> anyhow:: Result < String > {
349
- create_dir_all ( log_dir) ?;
350
-
351
- let log_file = format ! (
352
- "oma.log.{}" ,
353
- SystemTime :: now( )
354
- . duration_since( UNIX_EPOCH )
355
- . unwrap( )
356
- . as_secs( )
357
- ) ;
358
-
359
- let log_file = log_dir. join ( log_file) . to_string_lossy ( ) . to_string ( ) ;
360
-
361
- Ok ( log_file)
338
+ ( Some ( default_logger ( ) ) , Ok ( log_file) )
362
339
}
363
340
364
341
#[ inline]
0 commit comments