Use proper logging solution

This commit is contained in:
James 2018-08-04 16:28:13 +10:00
parent a9e51af7e0
commit 66fc287770
11 changed files with 97 additions and 19 deletions

2
.gitignore vendored
View File

@ -3,3 +3,5 @@
/target/ /target/
**/*.rs.bk **/*.rs.bk
*.log

38
Cargo.lock generated
View File

@ -77,6 +77,16 @@ name = "cfg-if"
version = "0.1.2" version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "chrono"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
version = "0.2.3" version = "0.2.3"
@ -115,6 +125,14 @@ dependencies = [
"cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "fern"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.1" version = "1.0.1"
@ -292,8 +310,11 @@ dependencies = [
name = "liftinstall" name = "liftinstall"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"fern 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"futures 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.11.27 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"mime_guess 1.8.6 (registry+https://github.com/rust-lang/crates.io-index)", "mime_guess 1.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
"nfd 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "nfd 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"number_prefix 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "number_prefix 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
@ -470,11 +491,24 @@ dependencies = [
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]]
name = "num-integer"
version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.1.42" version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "num-traits"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "num_cpus" name = "num_cpus"
version = "1.8.0" version = "1.8.0"
@ -1072,11 +1106,13 @@ dependencies = [
"checksum bzip2-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2c5162604199bbb17690ede847eaa6120a3f33d5ab4dcc8e7c25b16d849ae79b" "checksum bzip2-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2c5162604199bbb17690ede847eaa6120a3f33d5ab4dcc8e7c25b16d849ae79b"
"checksum cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "deaf9ec656256bb25b404c51ef50097207b9cbb29c933d31f92cae5a8a0ffee0" "checksum cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "deaf9ec656256bb25b404c51ef50097207b9cbb29c933d31f92cae5a8a0ffee0"
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" "checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
"checksum chrono 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e48d85528df61dc964aa43c5f6ca681a19cfa74939b2348d204bd08a981f2fb0"
"checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67" "checksum core-foundation 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25bfd746d203017f7d5cbd31ee5d8e17f94b6521c7af77ece6c9e4b2d4b16c67"
"checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d" "checksum core-foundation-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "065a5d7ffdcbc8fa145d6f0746f3555025b9097a9e9cda59f7467abae670c78d"
"checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7" "checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7"
"checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"
"checksum encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98fd0f24d1fb71a4a6b9330c8ca04cbd4e7cc5d846b54ca74ff376bc7c9f798d" "checksum encoding_rs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98fd0f24d1fb71a4a6b9330c8ca04cbd4e7cc5d846b54ca74ff376bc7c9f798d"
"checksum fern 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "57915fe00a83af935983eb2d00b0ecc62419c4741b28c207ecbf98fd4a1b94c8"
"checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909" "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909"
"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
@ -1115,7 +1151,9 @@ dependencies = [
"checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0" "checksum native-tls 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f74dbadc8b43df7864539cedb7bc91345e532fdd913cfdc23ad94f4d2d40fbc0"
"checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09" "checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"
"checksum nfd 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e752e3c216bc8a491c5b59fa46da10f1379ae450b19ac688e07f4bb55042e98" "checksum nfd 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8e752e3c216bc8a491c5b59fa46da10f1379ae450b19ac688e07f4bb55042e98"
"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
"checksum num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "9936036cc70fe4a8b2d338ab665900323290efb03983c86cbe235ae800ad8017" "checksum num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "9936036cc70fe4a8b2d338ab665900323290efb03983c86cbe235ae800ad8017"
"checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe"
"checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
"checksum number_prefix 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "59a14be9c211cb9c602bad35ac99f41e9a84b44d71b8cbd3040e3bd02a214902" "checksum number_prefix 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "59a14be9c211cb9c602bad35ac99f41e9a84b44d71b8cbd3040e3bd02a214902"
"checksum openssl 0.9.23 (registry+https://github.com/rust-lang/crates.io-index)" = "169a4b9160baf9b9b1ab975418c673686638995ba921683a7f1e01470dcb8854" "checksum openssl 0.9.23 (registry+https://github.com/rust-lang/crates.io-index)" = "169a4b9160baf9b9b1ab975418c673686638995ba921683a7f1e01470dcb8854"

View File

@ -33,6 +33,10 @@ regex = "0.2"
zip = "0.2.8" zip = "0.2.8"
log = "0.4"
fern = "0.5"
chrono = "0.4.5"
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]
# NFD is needed on Windows, as web-view doesn't work correctly here # NFD is needed on Windows, as web-view doesn't work correctly here
nfd = "0.0.4" nfd = "0.0.4"

View File

@ -86,7 +86,7 @@ impl InstallerFramework {
fresh_install: bool, fresh_install: bool,
) -> Result<(), String> { ) -> Result<(), String> {
// TODO: Uninstall packages that aren't selected // TODO: Uninstall packages that aren't selected
println!( info!(
"Framework: Installing {:?} to {:?}", "Framework: Installing {:?} to {:?}",
items, items,
self.install_path self.install_path
@ -103,7 +103,7 @@ impl InstallerFramework {
} }
} }
println!( info!(
"Framework: Uninstalling {:?} additionally.", "Framework: Uninstalling {:?} additionally.",
uninstall_items uninstall_items
); );
@ -117,12 +117,12 @@ impl InstallerFramework {
let mut tree = DependencyTree::build(task); let mut tree = DependencyTree::build(task);
println!("Dependency tree:\n{}", tree); info!("Dependency tree:\n{}", tree);
tree.execute(self, &|msg: &str, progress: f32| match messages tree.execute(self, &|msg: &str, progress: f32| match messages
.send(InstallMessage::Status(msg.to_string(), progress as _)) .send(InstallMessage::Status(msg.to_string(), progress as _))
{ {
Err(v) => eprintln!("Failed to submit queue message: {:?}", v), Err(v) => error!("Failed to submit queue message: {:?}", v),
_ => {} _ => {}
}).map(|_x| ()) }).map(|_x| ())
} }
@ -137,12 +137,12 @@ impl InstallerFramework {
let mut tree = DependencyTree::build(task); let mut tree = DependencyTree::build(task);
println!("Dependency tree:\n{}", tree); info!("Dependency tree:\n{}", tree);
tree.execute(self, &|msg: &str, progress: f32| match messages tree.execute(self, &|msg: &str, progress: f32| match messages
.send(InstallMessage::Status(msg.to_string(), progress as _)) .send(InstallMessage::Status(msg.to_string(), progress as _))
{ {
Err(v) => eprintln!("Failed to submit queue message: {:?}", v), Err(v) => error!("Failed to submit queue message: {:?}", v),
_ => {} _ => {}
}).map(|_x| ()) }).map(|_x| ())
} }

25
src/logging.rs Normal file
View File

@ -0,0 +1,25 @@
//! Contains functions to help with logging.
use fern;
use chrono;
use log;
use std::io;
pub fn setup_logger() -> Result<(), fern::InitError> {
fern::Dispatch::new()
.format(|out, message, record| {
out.finish(format_args!(
"{}[{}][{}] {}",
chrono::Local::now().format("[%H:%M:%S]"),
record.target(),
record.level(),
message
))
})
.level(log::LevelFilter::Info)
.chain(io::stdout())
.chain(fern::log_file("installer.log")?)
.apply()?;
Ok(())
}

View File

@ -28,6 +28,12 @@ extern crate semver;
extern crate zip; extern crate zip;
extern crate fern;
#[macro_use]
extern crate log;
extern crate chrono;
mod assets; mod assets;
mod config; mod config;
mod http; mod http;
@ -35,6 +41,7 @@ mod installer;
mod rest; mod rest;
mod sources; mod sources;
mod tasks; mod tasks;
mod logging;
use web_view::*; use web_view::*;
@ -62,20 +69,22 @@ enum CallbackType {
} }
fn main() { fn main() {
logging::setup_logger().expect("Unable to setup logging!");
let config = Config::from_toml_str(RAW_CONFIG).unwrap(); let config = Config::from_toml_str(RAW_CONFIG).unwrap();
let app_name = config.general.name.clone(); let app_name = config.general.name.clone();
println!("{} installer", app_name); info!("{} installer", app_name);
let current_exe = std::env::current_exe().unwrap(); let current_exe = std::env::current_exe().unwrap();
let current_path = current_exe.parent().unwrap(); let current_path = current_exe.parent().unwrap();
let metadata_file = current_path.join("metadata.json"); let metadata_file = current_path.join("metadata.json");
let framework = if metadata_file.exists() { let framework = if metadata_file.exists() {
println!("Using pre-existing metadata file: {:?}", metadata_file); info!("Using pre-existing metadata file: {:?}", metadata_file);
InstallerFramework::new_with_db(config, current_path).unwrap() InstallerFramework::new_with_db(config, current_path).unwrap()
} else { } else {
println!("Starting fresh install"); info!("Starting fresh install");
InstallerFramework::new(config) InstallerFramework::new(config)
}; };
@ -106,7 +115,7 @@ fn main() {
let server = WebServer::with_addr(framework.clone(), address).unwrap(); let server = WebServer::with_addr(framework.clone(), address).unwrap();
let addr = server.get_addr(); let addr = server.get_addr();
println!("Server: {:?}", addr); debug!("Server: {:?}", addr);
http_address = Some(addr); http_address = Some(addr);
@ -136,7 +145,7 @@ fn main() {
let command: CallbackType = let command: CallbackType =
serde_json::from_str(msg).expect(&format!("Unable to parse string: {:?}", msg)); serde_json::from_str(msg).expect(&format!("Unable to parse string: {:?}", msg));
println!("Incoming payload: {:?}", command); debug!("Incoming payload: {:?}", command);
match command { match command {
CallbackType::SelectInstallDir { callback_name } => { CallbackType::SelectInstallDir { callback_name } => {
@ -155,7 +164,7 @@ fn main() {
let result = let result =
serde_json::to_string(&result).expect("Unable to serialize response"); serde_json::to_string(&result).expect("Unable to serialize response");
let command = format!("{}({});", callback_name, result); let command = format!("{}({});", callback_name, result);
println!("Injecting response: {}", command); debug!("Injecting response: {}", command);
wv.eval(&command); wv.eval(&command);
} }
} }

View File

@ -165,7 +165,7 @@ impl Service for WebService {
match framework.uninstall(&sender) { match framework.uninstall(&sender) {
Err(v) => { Err(v) => {
eprintln!("Uninstall error occurred: {:?}", v); error!("Uninstall error occurred: {:?}", v);
sender.send(InstallMessage::Error(v)).unwrap(); sender.send(InstallMessage::Error(v)).unwrap();
}, },
_ => {} _ => {}
@ -238,7 +238,7 @@ impl Service for WebService {
match framework.install(to_install, &sender, new_install) { match framework.install(to_install, &sender, new_install) {
Err(v) => { Err(v) => {
eprintln!("Install error occurred: {:?}", v); error!("Install error occurred: {:?}", v);
sender.send(InstallMessage::Error(v)).unwrap(); sender.send(InstallMessage::Error(v)).unwrap();
}, },
_ => {} _ => {}

View File

@ -34,7 +34,7 @@ impl Task for DownloadPackageTask {
for element in &context.database { for element in &context.database {
if element.name == self.name { if element.name == self.name {
if element.version == version { if element.version == version {
println!("{:?} is already up to date.", self.name); info!("{:?} is already up to date.", self.name);
return Ok(TaskParamType::Break); return Ok(TaskParamType::Break);
} }
break; break;

View File

@ -109,7 +109,7 @@ impl Task for InstallPackageTask {
continue; continue;
} }
println!("Creating file: {:?}", target_path); info!("Creating file: {:?}", target_path);
installed_files.push(filename.to_string()); installed_files.push(filename.to_string());

View File

@ -78,7 +78,7 @@ impl Task for ResolvePackageTask {
.next() .next()
.unwrap(); .unwrap();
println!("Selected file: {:?}", latest_file); info!("Selected file: {:?}", latest_file);
Ok(TaskParamType::File(latest_version, latest_file)) Ok(TaskParamType::File(latest_version, latest_file))
} }

View File

@ -61,7 +61,7 @@ impl Task for UninstallPackageTask {
for file in package.files { for file in package.files {
let name = file.clone(); let name = file.clone();
let file = path.join(file); let file = path.join(file);
println!("Deleting {:?}", file); info!("Deleting {:?}", file);
messenger( messenger(
&format!("Deleting {} ({} of {})", name, i + 1, max), &format!("Deleting {} ({} of {})", name, i + 1, max),
@ -75,7 +75,7 @@ impl Task for UninstallPackageTask {
}; };
match result { match result {
Err(v) => eprintln!("Failed to delete file: {:?}", v), Err(v) => error!("Failed to delete file: {:?}", v),
_ => {} _ => {}
} }