wallet: add file rotated logs for all platforms

This commit is contained in:
darkfi
2024-09-27 15:32:28 +02:00
parent 964aeb47e2
commit 8212043bab
6 changed files with 138 additions and 32 deletions

View File

@@ -45,6 +45,9 @@ chrono = "0.4.38"
async-gen = "0.2"
async-trait = "0.1.82"
blake3 = "1.5.4"
simplelog = "0.12.1"
# For log files
file-rotate = "0.7.6"
[patch.crates-io]
freetype-rs = { git = "https://github.com/narodnik/freetype-rs" }
@@ -61,9 +64,6 @@ android_logger = "0.13.3"
#rusqlite = {version = "0.31.0", features = ["bundled"]}
tor-dirmgr = {version="0.21.0", features=["static"]}
[target.'cfg(target_os = "linux")'.dependencies]
simplelog = "0.12.1"
[package.metadata.android.activity_attributes]
"android:exported" = "true"
"android:windowSoftInputMode" = "adjustResize"

View File

@@ -57,7 +57,7 @@ use crate::{
#[cfg(target_os = "android")]
const EVGRDB_PATH: &str = "/data/data/darkfi.darkwallet/evgr/";
#[cfg(target_os = "linux")]
#[cfg(not(target_os = "android"))]
const EVGRDB_PATH: &str = "~/.local/darkfi/darkwallet/evgr/";
//const ENDPOINT: &str = "tcp://agorism.dev:25588";

View File

@@ -0,0 +1,113 @@
use darkfi::util::path::expand_path;
use file_rotate::{compression::Compression, suffix::AppendCount, ContentLimit, FileRotate};
use log::{Level, LevelFilter, Log, Metadata, Record};
use simplelog::{
ColorChoice, CombinedLogger, Config, ConfigBuilder, SharedLogger, TermLogger, TerminalMode,
WriteLogger,
};
use std::{thread::sleep, time::Duration};
const LOGS_ENABLED: bool = true;
#[cfg(target_os = "android")]
const LOGFILE_PATH: &str = "/sdcard/Download/darkwallet.log";
#[cfg(not(target_os = "android"))]
const LOGFILE_PATH: &str = "~/.local/darkfi/darkwallet.log";
#[cfg(target_os = "android")]
mod android {
use super::*;
use android_logger::{AndroidLogger, Config as AndroidConfig};
/// Implements a wrapper around the android logger so it's compatible with simplelog.
pub struct AndroidLoggerWrapper {
logger: AndroidLogger,
level: LevelFilter,
config: Config,
}
impl AndroidLoggerWrapper {
pub fn new(level: LevelFilter, config: Config) -> Box<Self> {
let cfg = AndroidConfig::default().with_max_level(level).with_tag("darkfi");
Box::new(Self { logger: AndroidLogger::new(cfg), level, config })
}
}
impl Log for AndroidLoggerWrapper {
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
let target = metadata.target();
if target.starts_with("sled") || target.starts_with("rustls") {
return false
}
if metadata.level() > self.level {
return false
}
self.logger.enabled(metadata)
}
fn log(&self, record: &Record<'_>) {
if self.enabled(record.metadata()) {
self.logger.log(record)
}
}
fn flush(&self) {}
}
impl SharedLogger for AndroidLoggerWrapper {
fn level(&self) -> LevelFilter {
self.level
}
fn config(&self) -> Option<&Config> {
Some(&self.config)
}
fn as_log(self: Box<Self>) -> Box<dyn Log> {
Box::new(*self)
}
}
}
pub fn setup_logging() {
// https://gist.github.com/jb-alvarado/6e223936446bb88cd9a93e7028fc2c4f
let mut loggers: Vec<Box<dyn SharedLogger>> = vec![];
let mut cfg = ConfigBuilder::new();
cfg.add_filter_ignore_str("sled");
cfg.add_filter_ignore_str("rustls");
let cfg = cfg.build();
if LOGS_ENABLED {
let logfile_path = expand_path(LOGFILE_PATH).unwrap();
let log_file = FileRotate::new(
logfile_path,
AppendCount::new(7),
ContentLimit::Lines(1000),
Compression::None,
#[cfg(unix)]
None,
);
let file_logger = WriteLogger::new(LevelFilter::Debug, cfg.clone(), log_file);
loggers.push(file_logger);
}
#[cfg(target_os = "android")]
{
use android::AndroidLoggerWrapper;
let android_logger = AndroidLoggerWrapper::new(LevelFilter::Debug, cfg);
loggers.push(android_logger);
}
#[cfg(not(target_os = "android"))]
{
// For ANSI colors in the terminal
colored::control::set_override(true);
let term_logger =
TermLogger::new(LevelFilter::Debug, cfg, TerminalMode::Mixed, ColorChoice::Auto);
loggers.push(term_logger);
}
CombinedLogger::init(loggers).expect("logger");
}

View File

@@ -38,6 +38,7 @@
//#![deny(unused_imports)]
use async_lock::{Mutex as AsyncMutex, RwLock as AsyncRwLock};
use file_rotate::{compression::Compression, suffix::AppendCount, ContentLimit, FileRotate};
use std::sync::{mpsc, Arc};
#[macro_use]
@@ -52,6 +53,7 @@ mod darkirc2;
mod error;
mod expr;
mod gfx;
mod logger;
mod mesh;
mod net;
//mod plugin;
@@ -83,6 +85,8 @@ fn main() {
// Exit the application on panic right away
std::panic::set_hook(Box::new(panic_hook));
logger::setup_logging();
#[cfg(target_os = "android")]
{
// Workaround for this bug
@@ -91,30 +95,12 @@ fn main() {
std::env::set_var("HOME", "/data/data/darkfi.darkwallet/");
}
android_logger::init_once(
android_logger::Config::default().with_max_level(LevelFilter::Debug).with_tag("darkfi"),
);
let paths = std::fs::read_dir("/data/data/darkfi.darkwallet/").unwrap();
for path in paths {
debug!("{}", path.unwrap().path().display())
}
}
#[cfg(target_os = "linux")]
{
// For ANSI colors in the terminal
colored::control::set_override(true);
let term_logger = simplelog::TermLogger::new(
simplelog::LevelFilter::Debug,
simplelog::Config::default(),
simplelog::TerminalMode::Mixed,
simplelog::ColorChoice::Auto,
);
simplelog::CombinedLogger::init(vec![term_logger]).expect("logger");
}
info!("Target OS: {}", build_info::TARGET_OS);
info!("Target arch: {}", build_info::TARGET_ARCH);

View File

@@ -290,7 +290,12 @@ impl ChatView {
on_modify.when_change(rect.prop(), redraw);
on_modify.when_change(debug.prop(), redraw);
let mut tasks = vec![insert_line_method_task, insert_unconf_line_method_task, motion_task, bgload_task];
let mut tasks = vec![
insert_line_method_task,
insert_unconf_line_method_task,
motion_task,
bgload_task,
];
tasks.append(&mut on_modify.tasks);
Self {
@@ -531,9 +536,7 @@ impl ChatView {
// Add message to page
let mut msgbuf = self.msgbuf.lock().await;
let Some(privmsg) = msgbuf.insert_privmsg(timest, msg_id, nick, text).await else {
return
};
let Some(privmsg) = msgbuf.insert_privmsg(timest, msg_id, nick, text).await else { return };
privmsg.confirmed = false;
self.redraw_cached(&mut msgbuf).await;
self.bgload_cv.notify();

View File

@@ -261,7 +261,13 @@ impl PrivMessage {
let color = match section {
0 => nick_color,
_ => if self.confirmed { text_color } else { UNCONF_COLOR },
_ => {
if self.confirmed {
text_color
} else {
UNCONF_COLOR
}
}
};
//if debug_render {
@@ -585,13 +591,13 @@ impl Message {
fn get_privmsg(&self) -> Option<&PrivMessage> {
match self {
Message::Priv(msg) => Some(msg),
_ => None
_ => None,
}
}
fn get_privmsg_mut(&mut self) -> Option<&mut PrivMessage> {
match self {
Message::Priv(msg) => Some(msg),
_ => None
_ => None,
}
}
}
@@ -783,9 +789,7 @@ impl MessageBuffer {
None
}
pub fn mark_confirmed(&mut self, msg_id: &MessageId) -> bool {
let Some(privmsg) = self.find_privmsg_mut(msg_id) else {
return false
};
let Some(privmsg) = self.find_privmsg_mut(msg_id) else { return false };
assert_eq!(privmsg.confirmed, false);
privmsg.confirmed = true;