11use std:: env:: { self , args} ;
22use std:: ffi:: CString ;
3- use std:: fs:: create_dir_all;
43use std:: io:: { self , IsTerminal , stderr, stdin} ;
54use std:: path:: { Path , PathBuf } ;
65
76use std:: process:: { Command , exit} ;
87
98use std:: sync:: Arc ;
109use std:: sync:: { LazyLock , OnceLock } ;
11- use std:: time:: { Duration , SystemTime , UNIX_EPOCH } ;
10+ use std:: time:: Duration ;
1211
1312mod args;
1413mod config;
@@ -285,20 +284,21 @@ fn init_localizer() {
285284
286285fn init_logger (
287286 oma : & OhManagerAilurus ,
288- _config : & Config ,
287+ config : & Config ,
289288) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
290289 let debug = oma. global . debug ;
291290 let dry_run = oma. global . dry_run ;
292291
293- let log_dir = if is_root ( ) {
292+ let log_file = ( if is_root ( ) {
294293 PathBuf :: from ( "/var/log/oma" )
295294 } else {
296295 dirs:: state_dir ( )
297296 . expect ( "Failed to get state dir" )
298297 . 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 ( ) ;
302302
303303 let ( level_filter, formatter) = if !debug && !dry_run {
304304 let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -317,24 +317,20 @@ fn init_logger(
317317 ( level_filter, formatter)
318318 } ;
319319
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 ( ) )
332328 . build ( )
333329 . unwrap ( ) ,
334- )
335- } else {
336- None
337- } ;
330+ ) )
331+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
332+ . build ( )
333+ . unwrap ( ) ;
338334
339335 let stream_sink = StdStreamSink :: builder ( )
340336 . formatter ( formatter)
@@ -346,33 +342,14 @@ fn init_logger(
346342
347343 logger_builder
348344 . 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) ) ;
354347
355348 let logger = logger_builder. build ( ) . unwrap ( ) ;
356349
357350 set_default_logger ( Arc :: new ( logger) ) ;
358351
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) )
376353}
377354
378355#[ inline]
0 commit comments