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;
@@ -240,20 +239,21 @@ fn init_localizer() {
240239
241240fn init_logger (
242241 oma : & OhManagerAilurus ,
243- _config : & Config ,
242+ config : & Config ,
244243) -> ( Option < Arc < Logger > > , anyhow:: Result < String > ) {
245244 let debug = oma. global . debug ;
246245 let dry_run = oma. global . dry_run ;
247246
248- let log_dir = if is_root ( ) {
247+ let log_file = ( if is_root ( ) {
249248 PathBuf :: from ( "/var/log/oma" )
250249 } else {
251250 dirs:: state_dir ( )
252251 . expect ( "Failed to get state dir" )
253252 . 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 ( ) ;
257257
258258 let ( level_filter, formatter) = if !debug && !dry_run {
259259 let level_filter = LevelFilter :: MoreSevereEqual ( Level :: Info ) ;
@@ -272,24 +272,20 @@ fn init_logger(
272272 ( level_filter, formatter)
273273 } ;
274274
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 ( ) )
287283 . build ( )
288284 . unwrap ( ) ,
289- )
290- } else {
291- None
292- } ;
285+ ) )
286+ . overflow_policy ( spdlog :: sink :: OverflowPolicy :: DropIncoming )
287+ . build ( )
288+ . unwrap ( ) ;
293289
294290 let stream_sink = StdStreamSink :: builder ( )
295291 . formatter ( formatter)
@@ -301,33 +297,14 @@ fn init_logger(
301297
302298 logger_builder
303299 . 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) ) ;
309302
310303 let logger = logger_builder. build ( ) . unwrap ( ) ;
311304
312305 set_default_logger ( Arc :: new ( logger) ) ;
313306
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) )
331308}
332309
333310#[ inline]
0 commit comments