Improve logging. Add log subcommand
This commit is contained in:
parent
b40778cc84
commit
43dc66c25e
18
Cargo.lock
generated
18
Cargo.lock
generated
|
@ -50,7 +50,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backtrace"
|
name = "backtrace"
|
||||||
version = "0.3.36"
|
version = "0.3.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
|
"backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -225,12 +225,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
name = "espanso"
|
name = "espanso"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cmake 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"fs2 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.99 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -246,7 +248,7 @@ name = "failure"
|
||||||
version = "0.1.5"
|
version = "0.1.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backtrace 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -323,6 +325,15 @@ dependencies = [
|
||||||
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log-panics"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.2.1"
|
version = "2.2.1"
|
||||||
|
@ -741,7 +752,7 @@ dependencies = [
|
||||||
"checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba"
|
"checksum arrayvec 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b8d73f9beda665eaa98ab9e4f7442bd4e7de6652587de55b2525e52e29c1b0ba"
|
||||||
"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
|
"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
|
||||||
"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
|
"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875"
|
||||||
"checksum backtrace 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "e43b13e6ad6177777669f60f642e26307b44676392fae3610676edb54073681d"
|
"checksum backtrace 0.3.37 (registry+https://github.com/rust-lang/crates.io-index)" = "5180c5a20655b14a819b652fd2378fa5f1697b6c9ddad3e695c2f9cedf6df4e2"
|
||||||
"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
|
"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b"
|
||||||
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
|
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
|
||||||
"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
|
"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
|
||||||
|
@ -773,6 +784,7 @@ dependencies = [
|
||||||
"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
|
"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba"
|
||||||
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
|
||||||
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
|
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
|
||||||
|
"checksum log-panics 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ae0136257df209261daa18d6c16394757c63e032e27aafd8b07788b051082bef"
|
||||||
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
|
"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
|
||||||
"checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10"
|
"checksum miniz_oxide 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7108aff85b876d06f22503dcce091e29f76733b2bfdd91eebce81f5e68203a10"
|
||||||
"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
|
"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
|
||||||
|
|
|
@ -17,6 +17,8 @@ simplelog = "0.7.1"
|
||||||
zip = "0.5.3"
|
zip = "0.5.3"
|
||||||
fs2 = "0.4.3"
|
fs2 = "0.4.3"
|
||||||
serde_json = "1.0.40"
|
serde_json = "1.0.40"
|
||||||
|
log-panics = {version = "2.0.0", features = ["with-backtrace"]}
|
||||||
|
backtrace = "0.3.37"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
libc = "0.2.62"
|
libc = "0.2.62"
|
||||||
|
|
59
src/main.rs
59
src/main.rs
|
@ -9,7 +9,7 @@ use std::time::Duration;
|
||||||
use clap::{App, Arg, SubCommand, ArgMatches};
|
use clap::{App, Arg, SubCommand, ArgMatches};
|
||||||
use fs2::FileExt;
|
use fs2::FileExt;
|
||||||
use log::{error, info, warn, LevelFilter};
|
use log::{error, info, warn, LevelFilter};
|
||||||
use simplelog::{CombinedLogger, SharedLogger, TerminalMode, TermLogger};
|
use simplelog::{CombinedLogger, SharedLogger, TerminalMode, TermLogger, WriteLogger};
|
||||||
|
|
||||||
use crate::config::ConfigSet;
|
use crate::config::ConfigSet;
|
||||||
use crate::config::runtime::RuntimeConfigManager;
|
use crate::config::runtime::RuntimeConfigManager;
|
||||||
|
@ -20,6 +20,7 @@ use crate::matcher::scrolling::ScrollingMatcher;
|
||||||
use crate::system::SystemManager;
|
use crate::system::SystemManager;
|
||||||
use crate::ui::UIManager;
|
use crate::ui::UIManager;
|
||||||
use crate::protocol::*;
|
use crate::protocol::*;
|
||||||
|
use std::io::{BufReader, BufRead};
|
||||||
|
|
||||||
mod ui;
|
mod ui;
|
||||||
mod event;
|
mod event;
|
||||||
|
@ -34,6 +35,7 @@ mod protocol;
|
||||||
mod clipboard;
|
mod clipboard;
|
||||||
|
|
||||||
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
||||||
|
const LOG_FILE: &str = "espanso.log";
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let matches = App::new("espanso")
|
let matches = App::new("espanso")
|
||||||
|
@ -67,6 +69,8 @@ fn main() {
|
||||||
.about("Tool to detect current window properties, to simplify filters creation."))
|
.about("Tool to detect current window properties, to simplify filters creation."))
|
||||||
.subcommand(SubCommand::with_name("daemon")
|
.subcommand(SubCommand::with_name("daemon")
|
||||||
.about("Start the daemon without spawning a new process."))
|
.about("Start the daemon without spawning a new process."))
|
||||||
|
.subcommand(SubCommand::with_name("log")
|
||||||
|
.about("Print the latest daemon logs."))
|
||||||
.subcommand(SubCommand::with_name("start")
|
.subcommand(SubCommand::with_name("start")
|
||||||
.about("Start the daemon spawning a new process in the background."))
|
.about("Start the daemon spawning a new process in the background."))
|
||||||
.subcommand(SubCommand::with_name("stop")
|
.subcommand(SubCommand::with_name("stop")
|
||||||
|
@ -122,6 +126,11 @@ fn main() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(_) = matches.subcommand_matches("log") {
|
||||||
|
log_main();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(_) = matches.subcommand_matches("start") {
|
if let Some(_) = matches.subcommand_matches("start") {
|
||||||
start_main(config_set);
|
start_main(config_set);
|
||||||
return;
|
return;
|
||||||
|
@ -168,20 +177,35 @@ fn daemon_main(config_set: ConfigSet) {
|
||||||
log_outputs.push(terminal_out);
|
log_outputs.push(terminal_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: WriteLogger::new(LevelFilter::Info, Config::default(), File::create("my_rust_binary.log").unwrap()),
|
// Initialize log file output
|
||||||
|
let espanso_dir = context::get_data_dir();
|
||||||
|
let log_file_path = espanso_dir.join(LOG_FILE);
|
||||||
|
let log_file = OpenOptions::new()
|
||||||
|
.read(true)
|
||||||
|
.write(true)
|
||||||
|
.create(true)
|
||||||
|
.truncate(true)
|
||||||
|
.open(log_file_path)
|
||||||
|
.expect("Cannot create log file.");
|
||||||
|
let file_out = WriteLogger::new(LevelFilter::Info, simplelog::Config::default(), log_file);
|
||||||
|
log_outputs.push(file_out);
|
||||||
|
|
||||||
CombinedLogger::init(
|
CombinedLogger::init(
|
||||||
log_outputs
|
log_outputs
|
||||||
).expect("Error opening log destination");
|
).expect("Error opening log destination");
|
||||||
|
|
||||||
|
// Activate logging for panics
|
||||||
|
log_panics::init();
|
||||||
|
|
||||||
info!("starting daemon...");
|
info!("starting daemon...");
|
||||||
|
|
||||||
let (send_channel, receive_channel) = mpsc::channel();
|
let (send_channel, receive_channel) = mpsc::channel();
|
||||||
|
|
||||||
let context = context::new(send_channel.clone());
|
let context = context::new(send_channel.clone());
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::Builder::new().name("daemon_background".to_string()).spawn(move || {
|
||||||
daemon_background(receive_channel, config_set);
|
daemon_background(receive_channel, config_set);
|
||||||
});
|
}).expect("Unable to spawn daemon background thread");
|
||||||
|
|
||||||
let ipc_server = protocol::get_ipc_server(send_channel.clone());
|
let ipc_server = protocol::get_ipc_server(send_channel.clone());
|
||||||
ipc_server.start();
|
ipc_server.start();
|
||||||
|
@ -293,6 +317,7 @@ fn stop_main(config_set: ConfigSet) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Kill the daemon if running and start it again
|
||||||
fn restart_main(config_set: ConfigSet) {
|
fn restart_main(config_set: ConfigSet) {
|
||||||
// Kill the daemon if running
|
// Kill the daemon if running
|
||||||
let lock_file = acquire_lock();
|
let lock_file = acquire_lock();
|
||||||
|
@ -346,6 +371,7 @@ fn detect_main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Send the given command to the espanso daemon
|
||||||
fn cmd_main(config_set: ConfigSet, matches: &ArgMatches) {
|
fn cmd_main(config_set: ConfigSet, matches: &ArgMatches) {
|
||||||
let command = if let Some(_) = matches.subcommand_matches("exit") {
|
let command = if let Some(_) = matches.subcommand_matches("exit") {
|
||||||
Some(IPCCommand {
|
Some(IPCCommand {
|
||||||
|
@ -389,6 +415,31 @@ fn send_command(config_set: ConfigSet, command: IPCCommand) -> Result<(), String
|
||||||
ipc_client.send_command(command)
|
ipc_client.send_command(command)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn log_main() {
|
||||||
|
let espanso_dir = context::get_data_dir();
|
||||||
|
let log_file_path = espanso_dir.join(LOG_FILE);
|
||||||
|
|
||||||
|
if !log_file_path.exists() {
|
||||||
|
println!("No log file found.");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
let log_file = File::open(log_file_path);
|
||||||
|
if let Ok(log_file) = log_file {
|
||||||
|
let reader = BufReader::new(log_file);
|
||||||
|
for line in reader.lines() {
|
||||||
|
if let Ok(line) = line {
|
||||||
|
println!("{}", line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}else{
|
||||||
|
println!("Error reading log file");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn acquire_lock() -> Option<File> {
|
fn acquire_lock() -> Option<File> {
|
||||||
let espanso_dir = context::get_data_dir();
|
let espanso_dir = context::get_data_dir();
|
||||||
let lock_file_path = espanso_dir.join("espanso.lock");
|
let lock_file_path = espanso_dir.join("espanso.lock");
|
||||||
|
|
|
@ -23,7 +23,7 @@ impl UnixIPCServer {
|
||||||
impl super::IPCServer for UnixIPCServer {
|
impl super::IPCServer for UnixIPCServer {
|
||||||
fn start(&self) {
|
fn start(&self) {
|
||||||
let event_channel = self.event_channel.clone();
|
let event_channel = self.event_channel.clone();
|
||||||
std::thread::spawn(move || {
|
std::thread::Builder::new().name("ipc_server".to_string()).spawn(move || {
|
||||||
let espanso_dir = context::get_data_dir();
|
let espanso_dir = context::get_data_dir();
|
||||||
let unix_socket = espanso_dir.join(UNIX_SOCKET_NAME);
|
let unix_socket = espanso_dir.join(UNIX_SOCKET_NAME);
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ impl super::IPCServer for UnixIPCServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}).expect("Unable to spawn IPC server thread");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ impl super::UIManager for WindowsUIManager {
|
||||||
|
|
||||||
// Setup a timeout to close the notification
|
// Setup a timeout to close the notification
|
||||||
let id = Arc::clone(&self.id);
|
let id = Arc::clone(&self.id);
|
||||||
thread::spawn(move || {
|
thread::Builder::new().name("notification_thread".to_string()).spawn(move || {
|
||||||
for i in 1..10 {
|
for i in 1..10 {
|
||||||
let duration = time::Duration::from_millis(200);
|
let duration = time::Duration::from_millis(200);
|
||||||
thread::sleep(duration);
|
thread::sleep(duration);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user