/hg/icedtea-web: Implemented proper file logging

jvanek at icedtea.classpath.org jvanek at icedtea.classpath.org
Sun Feb 17 09:36:12 UTC 2019


changeset 7ef277699fd1 in /hg/icedtea-web
details: http://icedtea.classpath.org/hg/icedtea-web?cmd=changeset;node=7ef277699fd1
author: Jiri Vanek <jvanek at redhat.com>
date: Sun Feb 17 10:35:53 2019 +0100

	Implemented proper file logging

	* rust-launcher/src/dirs_paths_helper.rs: AdvancedLogging moved to log_helper;  Linux::new(false) redeclared new to Linux::new(false, false);
	* rust-launcher/src/log_helper.rs: now harbor AdvancedLogging as it should since beggining log_impl now logs to fille only if log_to_file is true, logs to correct file, format time-stamp a bit better, creates a parent directory
	* rust-launcher/src/main.rs: get_os functions redeclared to (debug: bool, al: bool) and now calls new(debug, al) main no longer creates AdvancedLogging but calls proper get_os
	* rust-launcher/src/os_access.rs: added trait method of (advanced_logging), implementations now keep AdvancedLogging variable - dummy or loaded from properties as requested during creation
	* rust-launcher/src/property_from_files_resolver.rs: adapted to log_to_file -> log_to_file refactoring
	* rust-launcher/src/utils.rs: try_custom_logdir_from_properties renamed to try_logtarget_from_properties and now returns final log file. New method of (logfile_name) whic compses itw-like name for new log file. TestLogger implements (unimplemented) advanced_logging function


diffstat:

 ChangeLog                                         |  18 +++++
 rust-launcher/src/dirs_paths_helper.rs            |  39 +----------
 rust-launcher/src/log_helper.rs                   |  78 ++++++++++++++++------
 rust-launcher/src/main.rs                         |  13 +--
 rust-launcher/src/os_access.rs                    |  31 +++++++-
 rust-launcher/src/property_from_files_resolver.rs |  29 ++++++-
 rust-launcher/src/utils.rs                        |   5 +
 7 files changed, 139 insertions(+), 74 deletions(-)

diffs (417 lines):

diff -r 65de3b40a457 -r 7ef277699fd1 ChangeLog
--- a/ChangeLog	Sat Feb 16 20:56:33 2019 +0100
+++ b/ChangeLog	Sun Feb 17 10:35:53 2019 +0100
@@ -1,3 +1,21 @@
+2019-02-17  Jiri Vanek <jvanek at redhat.com>
+
+	Implemented proper file logging
+	* rust-launcher/src/dirs_paths_helper.rs: AdvancedLogging moved to log_helper;
+	Linux::new(false) redeclared new to Linux::new(false, false);
+	* rust-launcher/src/log_helper.rs: now harbor AdvancedLogging as it should since beggining
+	log_impl now logs to fille only if log_to_file is true, logs to correct file,
+	format time-stamp a bit better, creates a parent directory
+	* rust-launcher/src/main.rs: get_os functions redeclared to (debug: bool, al: bool) and now calls new(debug, al)
+	main no longer creates AdvancedLogging but calls proper get_os
+	* rust-launcher/src/os_access.rs: added trait method of (advanced_logging), implementations
+	now keep AdvancedLogging variable - dummy or loaded from properties as requested during creation
+	* rust-launcher/src/property_from_files_resolver.rs: adapted to log_to_file -> log_to_file refactoring
+	* rust-launcher/src/utils.rs: try_custom_logdir_from_properties renamed to 
+	try_logtarget_from_properties and now returns final log file. New method of
+	(logfile_name) whic compses itw-like name for new log file. TestLogger
+	implements (unimplemented) advanced_logging function
+
 2019-02-16  Jiri Vanek <jvanek at redhat.com>
 
 	Implemented basic stub for file logging
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/dirs_paths_helper.rs
--- a/rust-launcher/src/dirs_paths_helper.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/dirs_paths_helper.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -1,5 +1,4 @@
 use os_access;
-use property_from_files_resolver;
 
 use std;
 use std::env;
@@ -8,36 +7,6 @@
 pub static DEPLOYMENT_PROPERTIES: &'static str = "deployment.properties";
 
 
-pub struct AdvancedLogging {
-    pub log_to_file: bool,
-    pub user_logdir: std::path::PathBuf,
-    pub log_to_stdstreams: bool ,
-    pub log_to_system: bool,
-}
-
-impl Default for AdvancedLogging {
-    fn default() -> AdvancedLogging {
-        AdvancedLogging {
-            log_to_file:  false,
-            user_logdir: std::path::PathBuf::from("undeffined"),
-            log_to_stdstreams: true,
-            log_to_system: true
-        }
-    }
-}
-
-impl AdvancedLogging {
-    pub fn load(os: &os_access::Os) -> AdvancedLogging {
-        AdvancedLogging {
-            log_to_file: property_from_files_resolver::try_log_to_file_from_properties(os),
-            log_to_stdstreams: property_from_files_resolver::try_log_to_streams_from_properties(os),
-            log_to_system: property_from_files_resolver::try_log_to_system_from_properties(os),
-            user_logdir: property_from_files_resolver::try_custom_logdir_from_properties(os)
-        }
-    }
-
-
-}
 
 pub fn get_xdg_config_dir(os: &os_access::Os) -> Option<std::path::PathBuf> {
     match env::var("XDG_CONFIG_HOME") {
@@ -118,12 +87,12 @@
 
     #[cfg(not(windows))]
     fn get_os() -> os_access::Linux {
-        os_access::Linux::new(false)
+        os_access::Linux::new(false, false)
     }
 
     #[cfg(windows)]
     fn get_os() -> os_access::Windows {
-        os_access::Windows::new(false)
+        os_access::Windows::new(false, false)
     }
 
 
@@ -140,7 +109,7 @@
     #[test]
     #[cfg(not(windows))]
     fn check_config_files_paths_global() {
-        let os = os_access::Linux::new(false);
+        let os = os_access::Linux::new(false, false);
         let p6 = super::get_itw_global_config_file(&os);
         assert_ne!(None, p6);
         println!("{}", p6.clone().expect("unwrap failed").display());
@@ -150,7 +119,7 @@
     #[test]
     #[cfg(not(windows))]
     fn check_legacy_config_files_paths() {
-        let os = os_access::Linux::new(false);
+        let os = os_access::Linux::new(false, false);
         let p4 = super::get_itw_legacy_config_file(&os);
         let p5 = super::get_itw_legacy_global_config_file(&os);
         assert_ne!(None, p4);
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/log_helper.rs
--- a/rust-launcher/src/log_helper.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/log_helper.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -1,11 +1,14 @@
+//this module was created as std::io::Write; and std::fmt::Write; hcat be imoted together
+//adn still, there are different methods. Notably writeln is only in io version. but format! is only in fmt version
 use os_access;
 use std::fs::OpenOptions;
 use std::io::Write;
 use std::time::SystemTime;
 use std::time::UNIX_EPOCH;
 use std::fs::File;
+use property_from_files_resolver;
 
-static mut first: bool = true;
+static mut FIRST: bool = true;
 
 //0 critical
 //1 info
@@ -18,29 +21,62 @@
             println!("{}", s);
         }
     }
-    unsafe {
-        if first {
-            //mkdir
-            //createfile
-            //rust itw log initiate dor so
-            first = false;
-            let start = SystemTime::now();
-            let t = start.duration_since(UNIX_EPOCH).expect("time should be measureable");
-            let mut file = File::create("my-file").expect("failed to create file log");
-            if let Err(e) = write!(&mut file, "itw-rust-debug: file log started: {}\n", t.as_secs()) {
-                println!("Couldn't write to file: {}", e);
+    if os.advanced_logging().log_to_file {
+        unsafe {
+            if FIRST {
+                FIRST = false;
+                std::fs::create_dir_all(os.advanced_logging().log_target_file.parent().expect("hard to imagine log file without parent"));
+                let start = SystemTime::now();
+                let t = start.duration_since(UNIX_EPOCH).expect("time should be measureable");
+                let mut file = File::create(&os.advanced_logging().log_target_file).expect("failed to create file log");
+                let allsec = t.as_secs();
+                let sec = allsec % 60;
+                let min = (allsec / 60) % 60;
+                let h = allsec / (60 * 60);
+                if let Err(e) = write!(&mut file, "itw-rust-debug: file log started: {}:{}:{}\n", h, min, sec) {
+                    println!("Couldn't write to file: {}", e);
+                }
+                file.sync_all();
             }
-            file.sync_all();
+        }
+        let mut file = OpenOptions::new()
+            .write(true)
+            .append(true)
+            .open(&os.advanced_logging().log_target_file)
+            .expect("failed to append to file log");
+
+        if let Err(e) = writeln!(&mut file, "{}", s) {
+            println!("Couldn't write to file: {}", e);
+        }
+        file.sync_all();
+    }
+}
+
+pub struct AdvancedLogging {
+    pub log_to_file: bool,
+    pub log_target_file: std::path::PathBuf,
+    pub log_to_stdstreams: bool,
+    pub log_to_system: bool,
+}
+
+impl Default for AdvancedLogging {
+    fn default() -> AdvancedLogging {
+        AdvancedLogging {
+            log_to_file: false,
+            log_target_file: std::path::PathBuf::from("undeffined"),
+            log_to_stdstreams: true,
+            log_to_system: true,
         }
     }
-    let mut file = OpenOptions::new()
-        .write(true)
-        .append(true)
-        .open("my-file")
-        .expect("failed to append to file log");
+}
 
-    if let Err(e) = writeln!(&mut file, "{}", s) {
-        println!("Couldn't write to file: {}", e);
+impl AdvancedLogging {
+    pub fn load(os: &os_access::Os) -> AdvancedLogging {
+        AdvancedLogging {
+            log_to_file: property_from_files_resolver::try_log_to_file_from_properties(os),
+            log_to_stdstreams: property_from_files_resolver::try_log_to_streams_from_properties(os),
+            log_to_system: property_from_files_resolver::try_log_to_system_from_properties(os),
+            log_target_file: property_from_files_resolver::try_logtarget_from_properties(os),
+        }
     }
-    file.sync_all();
 }
\ No newline at end of file
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/main.rs
--- a/rust-launcher/src/main.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/main.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -14,13 +14,13 @@
 use std::env;
 
 #[cfg(not(windows))]
-fn get_os(debug: bool) -> os_access::Linux {
-    os_access::Linux::new(debug)
+fn get_os(debug: bool, al: bool) -> os_access::Linux {
+    os_access::Linux::new(debug, al)
 }
 
 #[cfg(windows)]
-fn get_os(debug: bool) -> os_access::Windows {
-    os_access::Windows::new(debug)
+fn get_os(debug: bool, al: bool) -> os_access::Windows {
+    os_access::Windows::new(debug, al)
 }
 
 fn is_debug_on() -> bool {
@@ -29,7 +29,7 @@
             return val;
         }
         _none => {
-            let os = get_os(false);
+            let os = get_os(false, false);
             return property_from_files_resolver::try_main_verbose_from_properties(&os);
         }
     }
@@ -74,9 +74,8 @@
 }
 
 fn main() {
-    let os = get_os(is_debug_on());
+    let os = get_os(is_debug_on(), true);
     os.log(&dirs_paths_helper::path_to_string(&dirs_paths_helper::current_program()));
-    let  al = dirs_paths_helper::AdvancedLogging::load(&os);
     let java_dir = utils::find_jre(&os);
     let mut info2 = String::new();
     write!(&mut info2, "selected jre: {}", java_dir.display()).expect("unwrap failed");
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/os_access.rs
--- a/rust-launcher/src/os_access.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/os_access.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -32,7 +32,7 @@
 }
 
 pub trait Os {
-    // logging "api" can change
+    fn advanced_logging(&self) ->  &log_helper::AdvancedLogging;
     fn log(&self, s: &str);
     fn info(&self, s: &str);
     fn get_registry_jdk(&self) -> Option<std::path::PathBuf>;
@@ -57,18 +57,27 @@
 #[cfg(not(windows))]
 pub struct Linux {
     verbose: bool,
+    al: log_helper::AdvancedLogging,
 }
 
 #[cfg(not(windows))]
 impl Linux {
-    pub fn new(debug: bool) -> Linux {
-        Linux { verbose: debug }
+    pub fn new(debug: bool, load_advanced: bool) -> Linux {
+        if ! load_advanced {
+            Linux { verbose: debug, al: log_helper::AdvancedLogging::default() }
+        } else {
+            Linux { verbose: debug, al: log_helper::AdvancedLogging::load(&Linux::new(debug, false)) }
+        }
     }
 }
 
 #[cfg(not(windows))]
 impl Os for Linux {
 
+    fn advanced_logging(&self) ->  &log_helper::AdvancedLogging {
+        return &self.al;
+    }
+
     fn is_verbose(&self) -> bool {
         return self.verbose;
     }
@@ -150,18 +159,30 @@
 #[cfg(windows)]
 pub struct Windows {
     verbose: bool,
+    al: log_helper::AdvancedLogging,
 }
 
 #[cfg(windows)]
 impl Windows {
-    pub fn new(debug: bool) -> Windows {
-        Windows { verbose: debug }
+    pub fn new(debug: bool, load_advanced: bool) -> Windows {
+        pub fn new(debug: bool, load_advanced: bool) -> Windows {
+            if ! load_advanced {
+                Windows { verbose: debug, al: log_helper::AdvancedLogging::default() }
+            } else {
+                Windows { verbose: debug, al: log_helper::AdvancedLogging::load(&Windows::new(debug, false)) }
+            }
+        }
     }
 
 }
 
 #[cfg(windows)]
 impl Os for Windows {
+
+    fn advanced_logging(&self) ->  &log_helper::AdvancedLogging {
+        return &self.al;
+    }
+
     fn log(&self, s: &str) {
         log_helper::log_impl(2,self, s);
     }
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/property_from_files_resolver.rs
--- a/rust-launcher/src/property_from_files_resolver.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/property_from_files_resolver.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -1,6 +1,9 @@
 use property_from_file;
 use os_access;
 use dirs_paths_helper;
+use::log_helper;
+use std::time::SystemTime;
+use std::time::UNIX_EPOCH;
 
 use std;
 use std::string::String;
@@ -41,7 +44,7 @@
             property_from_file::str_to_bool(&val)
         }
         None => {
-            dirs_paths_helper::AdvancedLogging::default().log_to_file
+            log_helper::AdvancedLogging::default().log_to_file
         }
     }
 }
@@ -53,7 +56,7 @@
             property_from_file::str_to_bool(&val)
         }
         None => {
-            dirs_paths_helper::AdvancedLogging::default().log_to_stdstreams
+            log_helper::AdvancedLogging::default().log_to_stdstreams
         }
     }
 }
@@ -65,22 +68,36 @@
             property_from_file::str_to_bool(&val)
         }
         None => {
-            dirs_paths_helper::AdvancedLogging::default().log_to_system
+            log_helper::AdvancedLogging::default().log_to_system
         }
     }
 }
 
-pub fn try_custom_logdir_from_properties(logger: &os_access::Os) ->  std::path::PathBuf {
+//this method is not in log_helpers because of io::write and  fmt::write issue
+pub fn logfile_name() -> String {
+    let start = SystemTime::now();
+    let t = start.duration_since(UNIX_EPOCH).expect("time should be measureable");
+    let m = t.as_secs();
+    //itw-javantx-2019-02-16_20:56:08.882.log
+    let mut future_name = String::new();
+    write!(&mut future_name, "itw-nativerustlauncher-{}.log", m).expect("unwrap failed");
+    future_name
+}
+
+pub fn try_logtarget_from_properties(logger: &os_access::Os) ->  std::path::PathBuf {
     let str_candidate = try_key_from_properties_files(logger, &get_basic_array(logger), property_from_file::KEY_USER_LOG_DIR, &property_from_file::NotMandatoryPathValidator {});
     match str_candidate {
         Some(val) => {
-            std::path::PathBuf::from(val)
+            let mut  futureFile=std::path::PathBuf::from(val);
+            futureFile.push(logfile_name());
+            futureFile
         }
         None => {
             let mut cfgdir_candidate = logger.get_user_config_dir();
             match cfgdir_candidate {
                 Some(mut cfgdir) => {
-                    cfgdir.push("/log");
+                    cfgdir.push("log");
+                    cfgdir.push(logfile_name());
                     cfgdir
                 }
                 None => {
diff -r 65de3b40a457 -r 7ef277699fd1 rust-launcher/src/utils.rs
--- a/rust-launcher/src/utils.rs	Sat Feb 16 20:56:33 2019 +0100
+++ b/rust-launcher/src/utils.rs	Sun Feb 17 10:35:53 2019 +0100
@@ -139,6 +139,7 @@
     use dirs_paths_helper;
     use hardcoded_paths;
     use std::ffi::OsString as fo;
+    use log_helper;
 
     #[test]
     fn try_none_jre_from_path() {
@@ -217,6 +218,10 @@
 
     impl os_access::Os for TestLogger {
 
+        fn advanced_logging(&self) ->  &log_helper::AdvancedLogging {
+            panic!("not implemented");
+        }
+
         fn is_verbose(&self) -> bool {
             return true;
         }


More information about the distro-pkg-dev mailing list