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;
@@ -271,20 +270,21 @@ fn init_localizer() {
271270
272271fn init_logger (
273272 oma : & OhManagerAilurus ,
274- _config : & Config ,
273+ config : & Config ,
275274) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
276275 let debug = oma. global . debug ;
277276 let dry_run = oma. global . dry_run ;
278277
279- let log_dir = if is_root ( ) {
278+ let log_file = ( if is_root ( ) {
280279 PathBuf :: from ( "/var/log/oma" )
281280 } else {
282281 dirs:: state_dir ( )
283282 . expect ( "Failed to get state dir" )
284283 . 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 ( ) ;
288288
289289 let ( level_filter, formatter) = if !debug && !dry_run {
290290 let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -303,24 +303,20 @@ fn init_logger(
303303 ( level_filter, formatter)
304304 } ;
305305
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 ( ) )
318314 . build ( )
319315 . unwrap ( ) ,
320- )
321- } else {
322- None
323- } ;
316+ ) )
317+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
318+ . build ( )
319+ . unwrap ( ) ;
324320
325321 let stream_sink = StdStreamSink :: builder ( )
326322 . formatter ( formatter)
@@ -332,33 +328,14 @@ fn init_logger(
332328
333329 logger_builder
334330 . 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) ) ;
340333
341334 let logger = logger_builder. build ( ) . unwrap ( ) ;
342335
343336 set_default_logger ( Arc :: new ( logger) ) ;
344337
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) )
362339}
363340
364341#[ inline]
0 commit comments