User configurable logging
This commit is contained in:
parent
9c8f21a095
commit
fea60c40c5
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -520,6 +520,7 @@ dependencies = [
|
|||||||
"dirs",
|
"dirs",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"futures",
|
"futures",
|
||||||
|
"log",
|
||||||
"minidom",
|
"minidom",
|
||||||
"rand",
|
"rand",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -31,6 +31,7 @@ tokio = { version = "1", features = ["net", "rt", "rt-multi-thread", "macros", "
|
|||||||
xmpp-parsers = "0.20"
|
xmpp-parsers = "0.20"
|
||||||
die = "0.2.0"
|
die = "0.2.0"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
|
log = "0.4"
|
||||||
env_logger = "0.10"
|
env_logger = "0.10"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
async-recursion = "1.0.5"
|
async-recursion = "1.0.5"
|
||||||
|
@ -3,3 +3,12 @@
|
|||||||
jid = "jid@example.org"
|
jid = "jid@example.org"
|
||||||
password = "sOmePa55W0rD"
|
password = "sOmePa55W0rD"
|
||||||
|
|
||||||
|
# configure logging, defaults are commented, unless you are a developer leave this alone
|
||||||
|
# can also set env variables KISS_XMPP_LOG_LEVEL and/or KISS_XMPP_LOG_STYLE, but values in this file override them
|
||||||
|
# many options, refer to: https://docs.rs/env_logger/0.8.3/env_logger/#enabling-logging
|
||||||
|
#log_level = "info"
|
||||||
|
# for development/debugging: log_level = "info,kiss_xmpp=trace"
|
||||||
|
|
||||||
|
# one of auto, always, never, refer to: https://docs.rs/env_logger/0.8.3/env_logger/#disabling-colors
|
||||||
|
#log_style = "never"
|
||||||
|
|
||||||
|
30
src/main.rs
30
src/main.rs
@ -1,6 +1,8 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use die::{die, Die};
|
use die::{die, Die};
|
||||||
|
use env_logger::{Builder, Env, Target};
|
||||||
use futures::stream::StreamExt;
|
use futures::stream::StreamExt;
|
||||||
|
use log::{info, trace};
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
use std::{convert::TryFrom, fs::File, io::Read, iter::Iterator, path::Path, str::FromStr};
|
use std::{convert::TryFrom, fs::File, io::Read, iter::Iterator, path::Path, str::FromStr};
|
||||||
use tokio::io::{self, AsyncBufReadExt, BufReader};
|
use tokio::io::{self, AsyncBufReadExt, BufReader};
|
||||||
@ -16,6 +18,8 @@ use xmpp_parsers::{
|
|||||||
struct Config {
|
struct Config {
|
||||||
jid: String,
|
jid: String,
|
||||||
password: String,
|
password: String,
|
||||||
|
log_level: Option<String>,
|
||||||
|
log_style: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_cfg<P: AsRef<Path>>(path: P) -> Result<Config> {
|
fn parse_cfg<P: AsRef<Path>>(path: P) -> Result<Config> {
|
||||||
@ -46,8 +50,6 @@ impl Context {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
env_logger::init();
|
|
||||||
|
|
||||||
let mut args = Args::default();
|
let mut args = Args::default();
|
||||||
|
|
||||||
if args.flags(&["-h", "--help"]) {
|
if args.flags(&["-h", "--help"]) {
|
||||||
@ -74,6 +76,21 @@ async fn main() -> Result<()> {
|
|||||||
.expect("never panics due to length check above");
|
.expect("never panics due to length check above");
|
||||||
let bare_me = BareJid::from_str(&cfg.jid).die("invalid account jid from config file");
|
let bare_me = BareJid::from_str(&cfg.jid).die("invalid account jid from config file");
|
||||||
let contact = Jid::from_str(&contact).die("invalid contact jid on command line");
|
let contact = Jid::from_str(&contact).die("invalid contact jid on command line");
|
||||||
|
|
||||||
|
let env = Env::default()
|
||||||
|
.filter_or("KISS_XMPP_LOG_LEVEL", "info")
|
||||||
|
.write_style_or("KISS_XMPP_LOG_STYLE", "never");
|
||||||
|
let mut builder = Builder::from_env(env);
|
||||||
|
builder.target(Target::Stdout);
|
||||||
|
if let Some(ref log_level) = cfg.log_level {
|
||||||
|
builder.parse_filters(log_level);
|
||||||
|
}
|
||||||
|
if let Some(ref log_style) = cfg.log_style {
|
||||||
|
builder.parse_write_style(log_style);
|
||||||
|
}
|
||||||
|
// todo: config for this: builder.format_timestamp(None);
|
||||||
|
builder.init();
|
||||||
|
|
||||||
let context = Context::new(bare_me, contact);
|
let context = Context::new(bare_me, contact);
|
||||||
|
|
||||||
let stdin = io::stdin();
|
let stdin = io::stdin();
|
||||||
@ -122,7 +139,7 @@ async fn handle_xmpp(event: Event, client: &mut Client, context: &Context) -> Re
|
|||||||
#[async_recursion::async_recursion]
|
#[async_recursion::async_recursion]
|
||||||
async fn handle_xmpp_element(element: Element, context: &Context) -> Result<()> {
|
async fn handle_xmpp_element(element: Element, context: &Context) -> Result<()> {
|
||||||
if let Ok(message) = Message::try_from(element) {
|
if let Ok(message) = Message::try_from(element) {
|
||||||
// eprintln!("+ whole message: {message:?}");
|
trace!("whole message: {message:?}");
|
||||||
match (message.from, message.bodies.get("")) {
|
match (message.from, message.bodies.get("")) {
|
||||||
(Some(from), Some(body)) => {
|
(Some(from), Some(body)) => {
|
||||||
let bare_from = from.to_bare();
|
let bare_from = from.to_bare();
|
||||||
@ -152,14 +169,14 @@ async fn handle_xmpp_element(element: Element, context: &Context) -> Result<()>
|
|||||||
println!("{muc_pm}<{from}> {}", line.trim());
|
println!("{muc_pm}<{from}> {}", line.trim());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// eprintln!("+ ignoring: from: '{from}', body: {body:?}");
|
info!("ignoring: from: '{from}', body: {body:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(Some(from), None) => {
|
(Some(from), None) => {
|
||||||
// maybe carbons
|
// maybe carbons
|
||||||
if context.bare_me == from {
|
if context.bare_me == from {
|
||||||
// we can trust this if it's carbons
|
// we can trust this if it's carbons
|
||||||
// eprintln!("+ got a carbon");
|
trace!("got a carbon");
|
||||||
if let Some(carbon) = message
|
if let Some(carbon) = message
|
||||||
.payloads
|
.payloads
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -176,11 +193,12 @@ async fn handle_xmpp_element(element: Element, context: &Context) -> Result<()>
|
|||||||
})
|
})
|
||||||
{
|
{
|
||||||
// recurse!
|
// recurse!
|
||||||
|
trace!("found and recursing on carbon");
|
||||||
return handle_xmpp_element(carbon, context).await;
|
return handle_xmpp_element(carbon, context).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => (), // eprintln!("+ ignoring message"),
|
_ => info!("ignoring message"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user