11use std:: process;
22
33use chrono:: { DateTime , Local } ;
4+ use once_cell:: sync:: Lazy ;
5+ use std:: sync:: Mutex ;
46
5- enum MessageType {
7+ #[ derive( Clone , Copy , serde:: Deserialize , Debug , Default , PartialEq , PartialOrd ) ]
8+ pub enum MessageType {
9+ /// Information message, this will not result in any action
610 Info ,
11+ /// Note message, this will result in some action that changes state
12+ #[ default]
13+ Note ,
14+ /// Warning message
715 Warning ,
16+ /// Error message
817 Error ,
918}
19+
20+ impl std:: fmt:: Display for MessageType {
21+ fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
22+ match self {
23+ MessageType :: Info => write ! ( f, "Info" ) ,
24+ MessageType :: Note => write ! ( f, "Note" ) ,
25+ MessageType :: Warning => write ! ( f, "Warning" ) ,
26+ MessageType :: Error => write ! ( f, "Error" ) ,
27+ }
28+ }
29+ }
30+
31+ static LOG_VERBOSITY : Lazy < Mutex < MessageType > > = Lazy :: new ( || Mutex :: new ( MessageType :: default ( ) ) ) ;
32+
33+ pub fn set_log_verbosity ( level : MessageType ) {
34+ let mut verbosity = LOG_VERBOSITY . lock ( ) . unwrap ( ) ;
35+ * verbosity = level;
36+ }
37+
38+ pub fn get_log_verbosity ( ) -> MessageType {
39+ let verbosity = LOG_VERBOSITY . lock ( ) . unwrap ( ) ;
40+ * verbosity
41+ }
42+
1043fn print_message_with_ts ( message : & str , message_type : MessageType ) {
1144 let datetime_now: DateTime < Local > = Local :: now ( ) ;
1245 let date_formatted = datetime_now. format ( "%Y-%m-%d %H:%M:%S" ) ;
1346 let pid = process:: id ( ) ;
1447 match message_type {
15- MessageType :: Info => println ! ( "{} [INFO] Readyset[{}]: {}" , date_formatted, pid, message) ,
16- MessageType :: Warning => println ! (
17- "{} [WARNING] Readyset[{}]: {}" ,
18- date_formatted, pid, message
19- ) ,
48+ MessageType :: Info => {
49+ if MessageType :: Info >= get_log_verbosity ( ) {
50+ println ! ( "{} [INFO] Readyset[{}]: {}" , date_formatted, pid, message) ;
51+ }
52+ }
53+ MessageType :: Note => {
54+ if MessageType :: Note >= get_log_verbosity ( ) {
55+ println ! ( "{} [NOTE] Readyset[{}]: {}" , date_formatted, pid, message) ;
56+ }
57+ }
58+ MessageType :: Warning => {
59+ if MessageType :: Warning >= get_log_verbosity ( ) {
60+ eprintln ! (
61+ "{} [WARNING] Readyset[{}]: {}" ,
62+ date_formatted, pid, message
63+ ) ;
64+ }
65+ }
2066 MessageType :: Error => {
21- eprintln ! ( "{} [ERROR] Readyset[{}]: {}" , date_formatted, pid, message)
67+ if MessageType :: Error >= get_log_verbosity ( ) {
68+ eprintln ! ( "{} [ERROR] Readyset[{}]: {}" , date_formatted, pid, message) ;
69+ }
2270 }
2371 }
2472}
@@ -27,6 +75,10 @@ pub fn print_info(message: &str) {
2775 print_message_with_ts ( message, MessageType :: Info ) ;
2876}
2977
78+ pub fn print_note ( message : & str ) {
79+ print_message_with_ts ( message, MessageType :: Note ) ;
80+ }
81+
3082pub fn print_warning ( message : & str ) {
3183 print_message_with_ts ( message, MessageType :: Warning ) ;
3284}
0 commit comments