Initializing logger for each command (#3090)

* Initializing logger for each command

* Single logger setup

* Whitespace [ci:skip]
This commit is contained in:
Tomasz Drwięga 2016-11-02 19:42:21 +01:00 committed by Gav Wood
parent b3d502ba78
commit cf8f27ce0f
7 changed files with 55 additions and 56 deletions

View File

@ -36,7 +36,7 @@ use regex::Regex;
use util::RotatingLogger; use util::RotatingLogger;
use util::log::Colour; use util::log::Colour;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq, Clone)]
pub struct Config { pub struct Config {
pub mode: Option<String>, pub mode: Option<String>,
pub color: bool, pub color: bool,

View File

@ -21,7 +21,6 @@ use std::time::{Instant, Duration};
use std::thread::sleep; use std::thread::sleep;
use std::sync::Arc; use std::sync::Arc;
use rustc_serialize::hex::FromHex; use rustc_serialize::hex::FromHex;
use ethcore_logger::{setup_log, Config as LogConfig};
use io::{PanicHandler, ForwardPanic}; use io::{PanicHandler, ForwardPanic};
use util::{ToPretty, Uint}; use util::{ToPretty, Uint};
use rlp::PayloadInfo; use rlp::PayloadInfo;
@ -71,7 +70,6 @@ pub enum BlockchainCmd {
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct ImportBlockchain { pub struct ImportBlockchain {
pub spec: SpecType, pub spec: SpecType,
pub logger_config: LogConfig,
pub cache_config: CacheConfig, pub cache_config: CacheConfig,
pub dirs: Directories, pub dirs: Directories,
pub file_path: Option<String>, pub file_path: Option<String>,
@ -85,12 +83,12 @@ pub struct ImportBlockchain {
pub fat_db: Switch, pub fat_db: Switch,
pub vm_type: VMType, pub vm_type: VMType,
pub check_seal: bool, pub check_seal: bool,
pub with_color: bool,
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct ExportBlockchain { pub struct ExportBlockchain {
pub spec: SpecType, pub spec: SpecType,
pub logger_config: LogConfig,
pub cache_config: CacheConfig, pub cache_config: CacheConfig,
pub dirs: Directories, pub dirs: Directories,
pub file_path: Option<String>, pub file_path: Option<String>,
@ -120,9 +118,6 @@ fn execute_import(cmd: ImportBlockchain) -> Result<String, String> {
// Setup panic handler // Setup panic handler
let panic_handler = PanicHandler::new_in_arc(); let panic_handler = PanicHandler::new_in_arc();
// Setup logging
let _logger = setup_log(&cmd.logger_config);
// create dirs used by parity // create dirs used by parity
try!(cmd.dirs.create_dirs()); try!(cmd.dirs.create_dirs());
@ -196,7 +191,7 @@ fn execute_import(cmd: ImportBlockchain) -> Result<String, String> {
} }
}; };
let informant = Informant::new(client.clone(), None, None, None, cmd.logger_config.color); let informant = Informant::new(client.clone(), None, None, None, cmd.with_color);
try!(service.register_io_handler(Arc::new(ImportIoHandler { try!(service.register_io_handler(Arc::new(ImportIoHandler {
info: Arc::new(informant), info: Arc::new(informant),
@ -269,9 +264,6 @@ fn execute_export(cmd: ExportBlockchain) -> Result<String, String> {
// Setup panic handler // Setup panic handler
let panic_handler = PanicHandler::new_in_arc(); let panic_handler = PanicHandler::new_in_arc();
// Setup logging
let _logger = setup_log(&cmd.logger_config);
// create dirs used by parity // create dirs used by parity
try!(cmd.dirs.create_dirs()); try!(cmd.dirs.create_dirs());

View File

@ -35,7 +35,7 @@ use params::{ResealPolicy, AccountsConfig, GasPricerConfig, MinerExtras};
use ethcore_logger::Config as LogConfig; use ethcore_logger::Config as LogConfig;
use dir::Directories; use dir::Directories;
use dapps::Configuration as DappsConfiguration; use dapps::Configuration as DappsConfiguration;
use signer::Configuration as SignerConfiguration; use signer::{Configuration as SignerConfiguration, SignerCommand};
use run::RunCmd; use run::RunCmd;
use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat}; use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat};
use presale::ImportWallet; use presale::ImportWallet;
@ -49,11 +49,16 @@ pub enum Cmd {
Account(AccountCmd), Account(AccountCmd),
ImportPresaleWallet(ImportWallet), ImportPresaleWallet(ImportWallet),
Blockchain(BlockchainCmd), Blockchain(BlockchainCmd),
SignerToken(String), SignerToken(SignerCommand),
Snapshot(SnapshotCommand), Snapshot(SnapshotCommand),
Hash(Option<String>), Hash(Option<String>),
} }
pub struct Execute {
pub logger: LogConfig,
pub cmd: Cmd,
}
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub struct Configuration { pub struct Configuration {
pub args: Args, pub args: Args,
@ -70,7 +75,7 @@ impl Configuration {
Ok(config) Ok(config)
} }
pub fn into_command(self) -> Result<Cmd, String> { pub fn into_command(self) -> Result<Execute, String> {
let dirs = self.directories(); let dirs = self.directories();
let pruning = try!(self.args.flag_pruning.parse()); let pruning = try!(self.args.flag_pruning.parse());
let pruning_history = self.args.flag_pruning_history; let pruning_history = self.args.flag_pruning_history;
@ -99,7 +104,9 @@ impl Configuration {
let cmd = if self.args.flag_version { let cmd = if self.args.flag_version {
Cmd::Version Cmd::Version
} else if self.args.cmd_signer && self.args.cmd_new_token { } else if self.args.cmd_signer && self.args.cmd_new_token {
Cmd::SignerToken(dirs.signer) Cmd::SignerToken(SignerCommand {
path: dirs.signer
})
} else if self.args.cmd_tools && self.args.cmd_hash { } else if self.args.cmd_tools && self.args.cmd_hash {
Cmd::Hash(self.args.arg_file) Cmd::Hash(self.args.arg_file)
} else if self.args.cmd_account { } else if self.args.cmd_account {
@ -141,7 +148,6 @@ impl Configuration {
} else if self.args.cmd_import { } else if self.args.cmd_import {
let import_cmd = ImportBlockchain { let import_cmd = ImportBlockchain {
spec: spec, spec: spec,
logger_config: logger_config,
cache_config: cache_config, cache_config: cache_config,
dirs: dirs, dirs: dirs,
file_path: self.args.arg_file.clone(), file_path: self.args.arg_file.clone(),
@ -155,12 +161,12 @@ impl Configuration {
fat_db: fat_db, fat_db: fat_db,
vm_type: vm_type, vm_type: vm_type,
check_seal: !self.args.flag_no_seal_check, check_seal: !self.args.flag_no_seal_check,
with_color: logger_config.color,
}; };
Cmd::Blockchain(BlockchainCmd::Import(import_cmd)) Cmd::Blockchain(BlockchainCmd::Import(import_cmd))
} else if self.args.cmd_export { } else if self.args.cmd_export {
let export_cmd = ExportBlockchain { let export_cmd = ExportBlockchain {
spec: spec, spec: spec,
logger_config: logger_config,
cache_config: cache_config, cache_config: cache_config,
dirs: dirs, dirs: dirs,
file_path: self.args.arg_file.clone(), file_path: self.args.arg_file.clone(),
@ -184,7 +190,6 @@ impl Configuration {
spec: spec, spec: spec,
pruning: pruning, pruning: pruning,
pruning_history: pruning_history, pruning_history: pruning_history,
logger_config: logger_config,
mode: mode, mode: mode,
tracing: tracing, tracing: tracing,
fat_db: fat_db, fat_db: fat_db,
@ -202,7 +207,6 @@ impl Configuration {
spec: spec, spec: spec,
pruning: pruning, pruning: pruning,
pruning_history: pruning_history, pruning_history: pruning_history,
logger_config: logger_config,
mode: mode, mode: mode,
tracing: tracing, tracing: tracing,
fat_db: fat_db, fat_db: fat_db,
@ -227,7 +231,7 @@ impl Configuration {
pruning: pruning, pruning: pruning,
pruning_history: pruning_history, pruning_history: pruning_history,
daemon: daemon, daemon: daemon,
logger_config: logger_config, logger_config: logger_config.clone(),
miner_options: miner_options, miner_options: miner_options,
http_conf: http_conf, http_conf: http_conf,
ipc_conf: ipc_conf, ipc_conf: ipc_conf,
@ -258,7 +262,10 @@ impl Configuration {
Cmd::Run(run_cmd) Cmd::Run(run_cmd)
}; };
Ok(cmd) Ok(Execute {
logger: logger_config,
cmd: cmd,
})
} }
fn enable_network(&self, mode: &Mode) -> bool { fn enable_network(&self, mode: &Mode) -> bool {
@ -684,7 +691,7 @@ mod tests {
use ethcore::miner::{MinerOptions, PrioritizationStrategy}; use ethcore::miner::{MinerOptions, PrioritizationStrategy};
use helpers::{replace_home, default_network_config}; use helpers::{replace_home, default_network_config};
use run::RunCmd; use run::RunCmd;
use signer::Configuration as SignerConfiguration; use signer::{Configuration as SignerConfiguration, SignerCommand};
use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat}; use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat};
use presale::ImportWallet; use presale::ImportWallet;
use account::{AccountCmd, NewAccount, ImportAccounts}; use account::{AccountCmd, NewAccount, ImportAccounts};
@ -705,14 +712,14 @@ mod tests {
fn test_command_version() { fn test_command_version() {
let args = vec!["parity", "--version"]; let args = vec!["parity", "--version"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Version); assert_eq!(conf.into_command().unwrap().cmd, Cmd::Version);
} }
#[test] #[test]
fn test_command_account_new() { fn test_command_account_new() {
let args = vec!["parity", "account", "new"]; let args = vec!["parity", "account", "new"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Account(AccountCmd::New(NewAccount { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account(AccountCmd::New(NewAccount {
iterations: 10240, iterations: 10240,
path: replace_home("$HOME/.parity/keys"), path: replace_home("$HOME/.parity/keys"),
password_file: None, password_file: None,
@ -723,16 +730,16 @@ mod tests {
fn test_command_account_list() { fn test_command_account_list() {
let args = vec!["parity", "account", "list"]; let args = vec!["parity", "account", "list"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Account( assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account(
AccountCmd::List(replace_home("$HOME/.parity/keys"))) AccountCmd::List(replace_home("$HOME/.parity/keys")),
); ));
} }
#[test] #[test]
fn test_command_account_import() { fn test_command_account_import() {
let args = vec!["parity", "account", "import", "my_dir", "another_dir"]; let args = vec!["parity", "account", "import", "my_dir", "another_dir"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Account(AccountCmd::Import(ImportAccounts { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account(AccountCmd::Import(ImportAccounts {
from: vec!["my_dir".into(), "another_dir".into()], from: vec!["my_dir".into(), "another_dir".into()],
to: replace_home("$HOME/.parity/keys"), to: replace_home("$HOME/.parity/keys"),
}))); })));
@ -742,7 +749,7 @@ mod tests {
fn test_command_wallet_import() { fn test_command_wallet_import() {
let args = vec!["parity", "wallet", "import", "my_wallet.json", "--password", "pwd"]; let args = vec!["parity", "wallet", "import", "my_wallet.json", "--password", "pwd"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::ImportPresaleWallet(ImportWallet { assert_eq!(conf.into_command().unwrap().cmd, Cmd::ImportPresaleWallet(ImportWallet {
iterations: 10240, iterations: 10240,
path: replace_home("$HOME/.parity/keys"), path: replace_home("$HOME/.parity/keys"),
wallet_path: "my_wallet.json".into(), wallet_path: "my_wallet.json".into(),
@ -754,9 +761,8 @@ mod tests {
fn test_command_blockchain_import() { fn test_command_blockchain_import() {
let args = vec!["parity", "import", "blockchain.json"]; let args = vec!["parity", "import", "blockchain.json"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Blockchain(BlockchainCmd::Import(ImportBlockchain { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Blockchain(BlockchainCmd::Import(ImportBlockchain {
spec: Default::default(), spec: Default::default(),
logger_config: Default::default(),
cache_config: Default::default(), cache_config: Default::default(),
dirs: Default::default(), dirs: Default::default(),
file_path: Some("blockchain.json".into()), file_path: Some("blockchain.json".into()),
@ -770,6 +776,7 @@ mod tests {
fat_db: Default::default(), fat_db: Default::default(),
vm_type: VMType::Interpreter, vm_type: VMType::Interpreter,
check_seal: true, check_seal: true,
with_color: true,
}))); })));
} }
@ -777,9 +784,8 @@ mod tests {
fn test_command_blockchain_export() { fn test_command_blockchain_export() {
let args = vec!["parity", "export", "blockchain.json"]; let args = vec!["parity", "export", "blockchain.json"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Blockchain(BlockchainCmd::Export(ExportBlockchain { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Blockchain(BlockchainCmd::Export(ExportBlockchain {
spec: Default::default(), spec: Default::default(),
logger_config: Default::default(),
cache_config: Default::default(), cache_config: Default::default(),
dirs: Default::default(), dirs: Default::default(),
file_path: Some("blockchain.json".into()), file_path: Some("blockchain.json".into()),
@ -801,9 +807,8 @@ mod tests {
fn test_command_blockchain_export_with_custom_format() { fn test_command_blockchain_export_with_custom_format() {
let args = vec!["parity", "export", "--format", "hex", "blockchain.json"]; let args = vec!["parity", "export", "--format", "hex", "blockchain.json"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Blockchain(BlockchainCmd::Export(ExportBlockchain { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Blockchain(BlockchainCmd::Export(ExportBlockchain {
spec: Default::default(), spec: Default::default(),
logger_config: Default::default(),
cache_config: Default::default(), cache_config: Default::default(),
dirs: Default::default(), dirs: Default::default(),
file_path: Some("blockchain.json".into()), file_path: Some("blockchain.json".into()),
@ -826,14 +831,16 @@ mod tests {
let args = vec!["parity", "signer", "new-token"]; let args = vec!["parity", "signer", "new-token"];
let conf = parse(&args); let conf = parse(&args);
let expected = replace_home("$HOME/.parity/signer"); let expected = replace_home("$HOME/.parity/signer");
assert_eq!(conf.into_command().unwrap(), Cmd::SignerToken(expected)); assert_eq!(conf.into_command().unwrap().cmd, Cmd::SignerToken(SignerCommand {
path: expected,
}));
} }
#[test] #[test]
fn test_run_cmd() { fn test_run_cmd() {
let args = vec!["parity"]; let args = vec!["parity"];
let conf = parse(&args); let conf = parse(&args);
assert_eq!(conf.into_command().unwrap(), Cmd::Run(RunCmd { assert_eq!(conf.into_command().unwrap().cmd, Cmd::Run(RunCmd {
cache_config: Default::default(), cache_config: Default::default(),
dirs: Default::default(), dirs: Default::default(),
spec: Default::default(), spec: Default::default(),

View File

@ -118,8 +118,9 @@ use std::io::BufReader;
use std::fs::File; use std::fs::File;
use util::sha3::sha3; use util::sha3::sha3;
use cli::Args; use cli::Args;
use configuration::{Cmd, Configuration}; use configuration::{Cmd, Execute, Configuration};
use deprecated::find_deprecated; use deprecated::find_deprecated;
use ethcore_logger::setup_log;
fn print_hash_of(maybe_file: Option<String>) -> Result<String, String> { fn print_hash_of(maybe_file: Option<String>) -> Result<String, String> {
if let Some(file) = maybe_file { if let Some(file) = maybe_file {
@ -131,10 +132,12 @@ fn print_hash_of(maybe_file: Option<String>) -> Result<String, String> {
} }
} }
fn execute(command: Cmd) -> Result<String, String> { fn execute(command: Execute) -> Result<String, String> {
match command { let logger = setup_log(&command.logger).expect("Logger is initialized only once; qed");
match command.cmd {
Cmd::Run(run_cmd) => { Cmd::Run(run_cmd) => {
try!(run::execute(run_cmd)); try!(run::execute(run_cmd, logger));
Ok("".into()) Ok("".into())
}, },
Cmd::Version => Ok(Args::print_version()), Cmd::Version => Ok(Args::print_version()),
@ -142,7 +145,7 @@ fn execute(command: Cmd) -> Result<String, String> {
Cmd::Account(account_cmd) => account::execute(account_cmd), Cmd::Account(account_cmd) => account::execute(account_cmd),
Cmd::ImportPresaleWallet(presale_cmd) => presale::execute(presale_cmd), Cmd::ImportPresaleWallet(presale_cmd) => presale::execute(presale_cmd),
Cmd::Blockchain(blockchain_cmd) => blockchain::execute(blockchain_cmd), Cmd::Blockchain(blockchain_cmd) => blockchain::execute(blockchain_cmd),
Cmd::SignerToken(path) => signer::new_token(path), Cmd::SignerToken(signer_cmd) => signer::execute(signer_cmd),
Cmd::Snapshot(snapshot_cmd) => snapshot::execute(snapshot_cmd), Cmd::Snapshot(snapshot_cmd) => snapshot::execute(snapshot_cmd),
} }
} }
@ -198,7 +201,7 @@ fn sync_main() -> bool {
fn main() { fn main() {
// Always print backtrace on panic. // Always print backtrace on panic.
::std::env::set_var("RUST_BACKTRACE", "1"); ::std::env::set_var("RUST_BACKTRACE", "1");
if sync_main() { if sync_main() {
return; return;
} }

View File

@ -17,11 +17,11 @@
use std::sync::{Arc, Mutex, Condvar}; use std::sync::{Arc, Mutex, Condvar};
use ctrlc::CtrlC; use ctrlc::CtrlC;
use fdlimit::raise_fd_limit; use fdlimit::raise_fd_limit;
use ethcore_logger::{Config as LogConfig, setup_log};
use ethcore_rpc::{NetworkSettings, is_major_importing}; use ethcore_rpc::{NetworkSettings, is_major_importing};
use ethsync::NetworkConfiguration; use ethsync::NetworkConfiguration;
use util::{Colour, version, U256}; use util::{Colour, version, U256, RotatingLogger};
use io::{MayPanic, ForwardPanic, PanicHandler}; use io::{MayPanic, ForwardPanic, PanicHandler};
use ethcore_logger::{Config as LogConfig};
use ethcore::client::{Mode, DatabaseCompactionProfile, VMType, ChainNotify, BlockChainClient}; use ethcore::client::{Mode, DatabaseCompactionProfile, VMType, ChainNotify, BlockChainClient};
use ethcore::service::ClientService; use ethcore::service::ClientService;
use ethcore::account_provider::AccountProvider; use ethcore::account_provider::AccountProvider;
@ -93,13 +93,10 @@ pub struct RunCmd {
pub check_seal: bool, pub check_seal: bool,
} }
pub fn execute(cmd: RunCmd) -> Result<(), String> { pub fn execute(cmd: RunCmd, logger: Arc<RotatingLogger>) -> Result<(), String> {
// set up panic handler // set up panic handler
let panic_handler = PanicHandler::new_in_arc(); let panic_handler = PanicHandler::new_in_arc();
// set up logger
let logger = try!(setup_log(&cmd.logger_config));
// increase max number of open files // increase max number of open files
raise_fd_limit(); raise_fd_limit();

View File

@ -68,8 +68,13 @@ fn codes_path(path: String) -> PathBuf {
p p
} }
pub fn new_token(path: String) -> Result<String, String> { #[derive(Debug, PartialEq)]
generate_new_token(path) pub struct SignerCommand {
pub path: String,
}
pub fn execute(cmd: SignerCommand) -> Result<String, String> {
generate_new_token(cmd.path)
.map(|code| format!("This key code will authorise your System Signer UI: {}", Colour::White.bold().paint(code))) .map(|code| format!("This key code will authorise your System Signer UI: {}", Colour::White.bold().paint(code)))
.map_err(|err| format!("Error generating token: {:?}", err)) .map_err(|err| format!("Error generating token: {:?}", err))
} }

View File

@ -20,7 +20,6 @@ use std::time::Duration;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::sync::Arc; use std::sync::Arc;
use ethcore_logger::{setup_log, Config as LogConfig};
use ethcore::snapshot::{Progress, RestorationStatus, SnapshotService as SS}; use ethcore::snapshot::{Progress, RestorationStatus, SnapshotService as SS};
use ethcore::snapshot::io::{SnapshotReader, PackedReader, PackedWriter}; use ethcore::snapshot::io::{SnapshotReader, PackedReader, PackedWriter};
use ethcore::snapshot::service::Service as SnapshotService; use ethcore::snapshot::service::Service as SnapshotService;
@ -55,7 +54,6 @@ pub struct SnapshotCommand {
pub spec: SpecType, pub spec: SpecType,
pub pruning: Pruning, pub pruning: Pruning,
pub pruning_history: u64, pub pruning_history: u64,
pub logger_config: LogConfig,
pub mode: Mode, pub mode: Mode,
pub tracing: Switch, pub tracing: Switch,
pub fat_db: Switch, pub fat_db: Switch,
@ -141,9 +139,6 @@ impl SnapshotCommand {
// load user defaults // load user defaults
let user_defaults = try!(UserDefaults::load(&user_defaults_path)); let user_defaults = try!(UserDefaults::load(&user_defaults_path));
// Setup logging
let _logger = setup_log(&self.logger_config);
fdlimit::raise_fd_limit(); fdlimit::raise_fd_limit();
// select pruning algorithm // select pruning algorithm