1
+ use std:: path:: Path ;
1
2
use crate :: rolling:: { create_writer_file, Inner , RollingFileAppender , Rotation } ;
2
3
use crate :: sync:: RwLock ;
3
4
use std:: sync:: atomic:: AtomicUsize ;
@@ -8,69 +9,53 @@ use crate::compression::CompressionConfig;
8
9
9
10
use crate :: writer:: WriterChannel ;
10
11
12
+
13
+ #[ derive( Debug ) ]
11
14
pub struct RollingFileAppenderBuilder {
12
- log_directory : Option < String > ,
13
- log_filename_prefix : Option < String > ,
15
+ log_directory : String ,
16
+ log_filename_prefix : String ,
14
17
rotation : Option < Rotation > ,
15
- next_date : Option < AtomicUsize > ,
16
18
#[ cfg( feature = "compression" ) ]
17
19
compression : Option < CompressionConfig > ,
18
20
}
19
21
20
22
impl RollingFileAppenderBuilder {
21
- pub fn new ( ) -> Self {
23
+ /// Creates an instance of RollingFileAppnderBuilder
24
+ pub fn new ( log_directory : impl AsRef < Path > ,
25
+ log_filename_prefix : impl AsRef < Path > ) -> Self {
26
+ let log_directory = log_directory. as_ref ( ) . to_str ( ) . expect ( "Cannot convert log_directory Path to str" ) . to_string ( ) ;
27
+ let log_filename_prefix = log_filename_prefix. as_ref ( ) . to_str ( ) . expect ( "Cannot convert log_filename_prefix Path to str" ) . to_string ( ) ;
22
28
RollingFileAppenderBuilder {
23
- log_directory : None ,
24
- log_filename_prefix : None ,
29
+ log_directory,
30
+ log_filename_prefix,
25
31
rotation : None ,
26
- next_date : None ,
27
32
#[ cfg( feature = "compression" ) ]
33
+ #[ cfg_attr( docsrs, doc( cfg( feature = "compression" ) ) ) ]
28
34
compression : None ,
29
35
}
30
36
}
31
37
32
- pub fn log_directory ( mut self , log_directory : String ) -> Self {
33
- self . log_directory = Some ( log_directory) ;
34
- self
35
- }
36
-
37
- pub fn log_filename_prefix ( mut self , log_filename_prefix : String ) -> Self {
38
- self . log_filename_prefix = Some ( log_filename_prefix) ;
39
- self
40
- }
41
-
38
+ /// Sets Rotation
42
39
pub fn rotation ( mut self , rotation : Rotation ) -> Self {
43
40
self . rotation = Some ( rotation) ;
44
41
self
45
42
}
46
43
47
- pub fn next_date ( mut self , next_date : AtomicUsize ) -> Self {
48
- self . next_date = Some ( next_date) ;
49
- self
50
- }
51
-
52
44
#[ cfg( feature = "compression" ) ]
45
+ #[ cfg_attr( docsrs, doc( cfg( feature = "compression" ) ) ) ]
53
46
pub fn compression ( mut self , compression : CompressionConfig ) -> Self {
54
47
self . compression = Some ( compression) ;
55
48
self
56
49
}
57
50
58
51
pub fn build ( self ) -> RollingFileAppender {
59
52
let now = OffsetDateTime :: now_utc ( ) ;
60
- let log_directory = self
61
- . log_directory
62
- . expect ( "log_directory is required to build RollingFileAppender" ) ;
63
- let log_filename_prefix = self
64
- . log_filename_prefix
65
- . expect ( "log_filename_prefix is required to build RollingFileAppender" ) ;
66
- let rotation = self
67
- . rotation
68
- . expect ( "rotation is required to build RollingFileAppender" ) ;
69
-
70
- let filename = rotation. join_date ( log_filename_prefix. as_str ( ) , & now, false ) ;
53
+ let rotation = self . rotation . unwrap_or ( Rotation :: NEVER ) ;
54
+ let filename = rotation. join_date ( self . log_filename_prefix . as_str ( ) , & now, false ) ;
71
55
let next_date = rotation. next_date ( & now) ;
56
+
72
57
let writer = RwLock :: new ( WriterChannel :: File (
73
- create_writer_file ( log_directory. as_str ( ) , & filename)
58
+ create_writer_file ( self . log_directory . as_str ( ) , & filename)
74
59
. expect ( "failed to create appender" ) ,
75
60
) ) ;
76
61
@@ -82,10 +67,10 @@ impl RollingFileAppenderBuilder {
82
67
83
68
RollingFileAppender {
84
69
state : Inner {
85
- log_directory,
86
- log_filename_prefix,
70
+ log_directory : self . log_directory ,
71
+ log_filename_prefix : self . log_filename_prefix ,
87
72
next_date,
88
- rotation,
73
+ rotation : rotation ,
89
74
#[ cfg( feature = "compression" ) ]
90
75
compression : self . compression ,
91
76
} ,
0 commit comments