diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 63f7d991..989f4328 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -91,9 +91,6 @@ jobs: tari-${{ runner.os }}-${{ runner.cpu-model }}-${{ env.toolchain }}-nightly-${{ hashFiles('**/Cargo.lock') }} tari-${{ runner.os }}-${{ runner.cpu-model }}-${{ env.toolchain }}-nightly - - name: cargo test compile - run: cargo test --no-run --locked --all-features --release ${{ env.TARGET_BINS }} - - name: upload artifact uses: actions/upload-artifact@v4 # upload test results as artifact if: always() @@ -158,10 +155,6 @@ jobs: tari-${{ runner.os }}-${{ runner.cpu-model }}-${{ env.toolchain }}-nightly-${{ hashFiles('**/Cargo.lock') }} tari-${{ runner.os }}-${{ runner.cpu-model }}-${{ env.toolchain }}-nightly - - name: cargo test compile - if: ${{ env.CI_FFI == 'true' }} - run: cargo test --no-run --locked --all-features --release ${{ env.TARGET_BINS }} - - name: upload artifact uses: actions/upload-artifact@v4 # upload test results as artifact if: always() diff --git a/Cargo.lock b/Cargo.lock index 150547ec..9ab359d4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1070,6 +1070,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-next" version = "1.0.2" @@ -1080,6 +1089,17 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1189,29 +1209,6 @@ dependencies = [ "syn 2.0.68", ] -[[package]] -name = "env_filter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -4051,7 +4048,7 @@ dependencies = [ "blake2", "clap 4.5.8", "digest", - "env_logger", + "dirs", "libp2p", "log", "minotari_app_grpc", diff --git a/Cargo.toml b/Cargo.toml index 33d39782..b6fb32f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,6 @@ thiserror = "1.0" serde = "1.0.203" anyhow = "1.0" log = "0.4.21" -env_logger = "0.11.3" tonic = "0.8.3" async-trait = "0.1.80" serde_cbor = "0.11.2" @@ -46,5 +45,4 @@ digest = "0.10.7" clap = { version = "4.5.7", features = ["derive"] } moka = { version = "0.12.7", features = ["future"] } rand = "0.8.0" - - +dirs = "4.0.0" diff --git a/log4rs_sample.yml b/log4rs_sample.yml new file mode 100644 index 00000000..71502294 --- /dev/null +++ b/log4rs_sample.yml @@ -0,0 +1,53 @@ +refresh_rate: 30 seconds +appenders: + # An appender named "stdout" that writes to stdout + stdout: + kind: console + encoder: + pattern: "{d(%Y-%m-%dT%H:%M:%S%Z)} {h({l}):5} {t} {m}{n}" + filters: + - kind: threshold + level: info + + # An appender named "p2pool" that writes to a file with a custom pattern encoder + p2pool: + kind: rolling_file + path: "{{log_dir}}/log/p2pool.log" + policy: + kind: compound + trigger: + kind: size + limit: 10mb + roller: + kind: fixed_window + base: 1 + count: 5 + pattern: "{{log_dir}}/log/p2pool.{}.log" + encoder: + pattern: "[{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] [Thread:{I}] {l:5} {m}{n}]" + +# Set the default logging level to "warn" and attach the "stdout" appender to the root +root: + level: info + appenders: + - stdout + +loggers: + sharechain: + level: info + appenders: + - p2pool + - stdout + additive: false + p2p: + level: info + appenders: + - p2pool + - stdout + additive: false + server: + level: info + appenders: + - p2pool + - stdout + additive: false diff --git a/src/main.rs b/src/main.rs index 0631bd41..2fb9ec81 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,9 +7,10 @@ use clap::{ builder::{styling::AnsiColor, Styles}, Parser, }; -use env_logger::Builder; use log::LevelFilter; +use tari_common::initialize_logging; + use crate::sharechain::in_memory::InMemoryShareChain; mod server; @@ -26,7 +27,7 @@ fn cli_styles() -> Styles { .valid(AnsiColor::BrightGreen.on_default()) } -#[derive(Parser)] +#[derive(Clone, Parser)] #[command(version)] #[command(styles = cli_styles())] #[command(about = "⛏ Decentralized mining pool for Tari network ⛏", long_about = None)] @@ -77,13 +78,32 @@ struct Cli { /// By setting this it can be used as a stable node for routing only. #[arg(long, value_name = "mining-disabled", default_value_t = false)] mining_disabled: bool, + + base_dir: Option, +} + +impl Cli { + pub fn base_dir(&self) -> PathBuf { + self.base_dir + .clone() + .unwrap_or_else(|| dirs::home_dir().unwrap().join(".p2pool/miner")) + } } #[tokio::main] async fn main() -> anyhow::Result<()> { - // cli let cli = Cli::parse(); - Builder::new().filter_level(cli.log_level).init(); + + // logger setup + if let Err(e) = initialize_logging( + &cli.base_dir().join("configs/logs.yml"), + &cli.base_dir(), + include_str!("../log4rs_sample.yml"), + ) { + eprintln!("{}", e); + return Err(e.into()); + } + let mut config_builder = server::Config::builder(); if let Some(grpc_port) = cli.grpc_port { config_builder.with_grpc_port(grpc_port); @@ -91,11 +111,11 @@ async fn main() -> anyhow::Result<()> { if let Some(p2p_port) = cli.p2p_port { config_builder.with_p2p_port(p2p_port); } - if let Some(seed_peers) = cli.seed_peers { + if let Some(seed_peers) = cli.seed_peers.clone() { config_builder.with_seed_peers(seed_peers); } config_builder.with_stable_peer(cli.stable_peer); - config_builder.with_private_key_folder(cli.private_key_folder); + config_builder.with_private_key_folder(cli.private_key_folder.clone()); config_builder.with_mining_enabled(!cli.mining_disabled); // server start diff --git a/src/server/grpc/p2pool.rs b/src/server/grpc/p2pool.rs index cf99faae..39790a4b 100644 --- a/src/server/grpc/p2pool.rs +++ b/src/server/grpc/p2pool.rs @@ -21,7 +21,7 @@ use crate::{ sharechain::{block::Block, ShareChain, SHARE_COUNT}, }; -const LOG_TARGET: &str = "p2pool_grpc"; +const LOG_TARGET: &str = "p2pool::server::grpc::p2pool"; /// P2Pool specific gRPC service to provide `get_new_block` and `submit_block` functionalities. pub struct ShaP2PoolGrpc diff --git a/src/server/p2p/client.rs b/src/server/p2p/client.rs index ff73b80c..5ad62aef 100644 --- a/src/server/p2p/client.rs +++ b/src/server/p2p/client.rs @@ -26,7 +26,7 @@ use crate::{ sharechain::block::Block, }; -const LOG_TARGET: &str = "p2p_service_client"; +const LOG_TARGET: &str = "p2pool::server::p2p::client"; #[derive(Error, Debug)] pub enum ClientError { diff --git a/src/server/p2p/peer_store.rs b/src/server/p2p/peer_store.rs index 7f4c788f..c9481019 100644 --- a/src/server/p2p/peer_store.rs +++ b/src/server/p2p/peer_store.rs @@ -12,7 +12,7 @@ use moka::future::{Cache, CacheBuilder}; use crate::server::p2p::messages::PeerInfo; -const LOG_TARGET: &str = "peer_store"; +const LOG_TARGET: &str = "p2pool::server::p2p::peer_store"; #[derive(Copy, Clone, Debug)] pub struct PeerStoreConfig { diff --git a/src/server/server.rs b/src/server/server.rs index 5154c617..ae019886 100644 --- a/src/server/server.rs +++ b/src/server/server.rs @@ -20,7 +20,7 @@ use crate::{ sharechain::ShareChain, }; -const LOG_TARGET: &str = "server"; +const LOG_TARGET: &str = "p2pool::server::server"; #[derive(Error, Debug)] pub enum Error { diff --git a/src/sharechain/in_memory.rs b/src/sharechain/in_memory.rs index aa1957a2..444b29bd 100644 --- a/src/sharechain/in_memory.rs +++ b/src/sharechain/in_memory.rs @@ -16,7 +16,7 @@ use crate::sharechain::{ Block, ShareChain, ShareChainResult, MAX_BLOCKS_COUNT, SHARE_COUNT, }; -const LOG_TARGET: &str = "in_memory_share_chain"; +const LOG_TARGET: &str = "p2pool::sharechain::in_memory"; pub struct InMemoryShareChain { max_blocks_count: usize,