@@ -4,36 +4,21 @@ use eyre::Result;
44use serde:: { Deserialize , Serialize } ;
55
66use super :: { load_optional_env_var, CommitBoostConfig , LOGS_DIR_DEFAULT , LOGS_DIR_ENV } ;
7+ use crate :: utils:: default_bool;
78
8- #[ derive( Clone , Debug , Deserialize , Serialize ) ]
9+ #[ derive( Clone , Default , Debug , Deserialize , Serialize ) ]
910pub struct LogsSettings {
10- #[ serde( default = "default_log_dir_path" ) ]
11- pub log_dir_path : PathBuf ,
12- #[ serde( default = "default_log_level" ) ]
13- pub log_level : String ,
14- #[ serde( default ) ]
15- pub max_log_files : Option < usize > ,
16- }
17-
18- impl Default for LogsSettings {
19- fn default ( ) -> Self {
20- LogsSettings {
21- log_dir_path : default_log_dir_path ( ) ,
22- log_level : default_log_level ( ) ,
23- max_log_files : None ,
24- }
25- }
11+ pub stdout : StdoutLogSettings ,
12+ pub file : FileLogSettings ,
2613}
2714
2815impl LogsSettings {
29- pub fn from_env_config ( ) -> Result < Option < Self > > {
16+ pub fn from_env_config ( ) -> Result < Self > {
3017 let mut config = CommitBoostConfig :: from_env_path ( ) ?;
3118
3219 // Override log dir path if env var is set
33- if let Some ( log_config) = config. logs . as_mut ( ) {
34- if let Some ( log_dir) = load_optional_env_var ( LOGS_DIR_ENV ) {
35- log_config. log_dir_path = log_dir. into ( ) ;
36- }
20+ if let Some ( log_dir) = load_optional_env_var ( LOGS_DIR_ENV ) {
21+ config. logs . file . dir_path = log_dir. into ( ) ;
3722 }
3823
3924 Ok ( config. logs )
@@ -44,6 +29,50 @@ fn default_log_dir_path() -> PathBuf {
4429 LOGS_DIR_DEFAULT . into ( )
4530}
4631
47- pub fn default_log_level ( ) -> String {
32+ fn default_level ( ) -> String {
4833 "info" . into ( )
4934}
35+
36+ #[ derive( Clone , Debug , Deserialize , Serialize ) ]
37+ pub struct StdoutLogSettings {
38+ #[ serde( default = "default_bool::<true>" ) ]
39+ pub enabled : bool ,
40+ #[ serde( default = "default_level" ) ]
41+ pub level : String ,
42+ #[ serde( default = "default_bool::<false>" ) ]
43+ pub use_json : bool ,
44+ #[ serde( default = "default_bool::<true>" ) ]
45+ pub color : bool ,
46+ }
47+
48+ impl Default for StdoutLogSettings {
49+ fn default ( ) -> Self {
50+ Self { enabled : true , level : "info" . into ( ) , use_json : false , color : true }
51+ }
52+ }
53+
54+ #[ derive( Clone , Debug , Deserialize , Serialize ) ]
55+ pub struct FileLogSettings {
56+ #[ serde( default = "default_bool::<false>" ) ]
57+ pub enabled : bool ,
58+ #[ serde( default = "default_level" ) ]
59+ pub level : String ,
60+ #[ serde( default = "default_bool::<true>" ) ]
61+ pub use_json : bool ,
62+ #[ serde( default = "default_log_dir_path" ) ]
63+ pub dir_path : PathBuf ,
64+ #[ serde( default ) ]
65+ pub max_files : Option < usize > ,
66+ }
67+
68+ impl Default for FileLogSettings {
69+ fn default ( ) -> Self {
70+ Self {
71+ enabled : false ,
72+ level : "info" . into ( ) ,
73+ use_json : true ,
74+ dir_path : default_log_dir_path ( ) ,
75+ max_files : None ,
76+ }
77+ }
78+ }
0 commit comments