Skip to content

Commit f7729f8

Browse files
authored
Make error!() logs shorter, label log location, fix warnings (#79)
* Make error!() logs shorter, label log location, fix warnings * Add JSON log support via slog-bunyan; Add code location flag * README: Document logging options, agent.rs: make plain logs default * bin/agent.rs: Fill bunyan "name" field, print version before startup * Move version/cwd information to src/agent.rs * Cargo.toml: Bump version for v2.1.0 release
1 parent eb5e04b commit f7729f8

File tree

12 files changed

+151
-48
lines changed

12 files changed

+151
-48
lines changed

Cargo.lock

Lines changed: 31 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "pyth-agent"
3-
version = "2.0.1"
3+
version = "2.1.0"
44
edition = "2021"
55

66
[[bin]]
@@ -51,6 +51,7 @@ humantime = "2.1.0"
5151
prometheus-client = "0.19.0"
5252
lazy_static = "1.4.0"
5353
toml_edit = "0.19.13"
54+
slog-bunyan = "2.4.0"
5455

5556
[dev-dependencies]
5657
tokio-util = { version = "0.7.0", features = ["full"] }

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,16 @@ The agent takes a single `--config` CLI option, pointing at
2828
there, containing a minimal set of mandatory options and documentation
2929
comments for optional settings. **The config file must exist.**
3030

31+
### Logging
3132
The logging level can be configured at runtime
3233
through the `RUST_LOG` environment variable using the standard
33-
`error|warn|info|debug|trace` levels.
34+
`error|warn|info|debug|trace`.
35+
36+
#### Plain/JSON logging
37+
By default, pyth-agent will print plaintext log statements. This can be switched to structured JSON output with `-l json`.
38+
39+
#### Code location in logs
40+
For debugging purposes, you can specify `-L` to print file/line information with each log statement. This option is disabled by default.
3441

3542
### Key Store Config Migration [v1.x.x LEGACY]
3643
Pyth agent v2.0.0 introduces a simplified program and mapping key configuration. This breaking change alters how you define program/mapping key options in your agent config:

src/agent.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,15 @@ impl Agent {
9292
}
9393

9494
pub async fn start(&self, logger: Logger) {
95-
info!(logger, "starting agent"; "config" => format!("{:?}", self.config));
95+
info!(logger, "Starting {}", env!("CARGO_PKG_NAME");
96+
"config" => format!("{:?}", &self.config),
97+
"version" => env!("CARGO_PKG_VERSION"),
98+
"cwd" => std::env::current_dir().map(|p| format!("{}", p.display())).unwrap_or("<could not get current directory>".to_owned())
99+
);
100+
96101
if let Err(err) = self.spawn(logger.clone()).await {
97-
error!(logger, "{:#}", err; "error" => format!("{:?}", err));
102+
error!(logger, "{}", err);
103+
debug!(logger, "error context"; "context" => format!("{:?}", err));
98104
};
99105
}
100106

src/agent/pythd/adapter.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@ impl Adapter {
210210
tokio::select! {
211211
Some(message) = self.message_rx.recv() => {
212212
if let Err(err) = self.handle_message(message).await {
213-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err))
213+
error!(self.logger, "{}", err);
214+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
214215
}
215216
}
216217
_ = self.shutdown_rx.recv() => {
@@ -219,7 +220,8 @@ impl Adapter {
219220
}
220221
_ = self.notify_price_sched_interval.tick() => {
221222
if let Err(err) = self.send_notify_price_sched().await {
222-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err))
223+
error!(self.logger, "{}", err);
224+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
223225
}
224226
}
225227
}

src/agent/pythd/api.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,8 @@ pub mod rpc {
259259
return;
260260
}
261261

262-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err))
262+
error!(self.logger, "{}", err);
263+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
263264
}
264265
}
265266
}
@@ -617,7 +618,8 @@ pub mod rpc {
617618

618619
pub async fn run(&self, shutdown_rx: broadcast::Receiver<()>) {
619620
if let Err(err) = self.serve(shutdown_rx).await {
620-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err))
621+
error!(self.logger, "{}", err);
622+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
621623
}
622624
}
623625

src/agent/solana.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,7 @@ pub mod network {
113113
/// The key_store module is responsible for parsing the pythd key store.
114114
mod key_store {
115115
use {
116-
anyhow::{
117-
Context,
118-
Result,
119-
},
116+
anyhow::Result,
120117
serde::{
121118
de::Error,
122119
Deserialize,
@@ -131,11 +128,7 @@ mod key_store {
131128
signer::keypair,
132129
},
133130
std::{
134-
fs,
135-
path::{
136-
Path,
137-
PathBuf,
138-
},
131+
path::PathBuf,
139132
str::FromStr,
140133
},
141134
};

src/agent/solana/exporter.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,8 @@ impl Exporter {
270270
loop {
271271
self.publish_interval.tick().await;
272272
if let Err(err) = self.publish_updates().await {
273-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
273+
error!(self.logger, "{}", err);
274+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
274275
}
275276
}
276277
}
@@ -367,7 +368,7 @@ impl Exporter {
367368
let permissioned_updates = fresh_updates
368369
.into_iter()
369370
.filter(|(id, _data)| {
370-
let key_from_id = Pubkey::new(id.clone().to_bytes().as_slice());
371+
let key_from_id = Pubkey::new((*id).clone().to_bytes().as_slice());
371372
if self.our_prices.contains(&key_from_id) {
372373
true
373374
} else {
@@ -751,7 +752,8 @@ impl NetworkStateQuerier {
751752
loop {
752753
self.query_interval.tick().await;
753754
if let Err(err) = self.query_network_state().await {
754-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
755+
error!(self.logger, "{}", err);
756+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
755757
}
756758
}
757759
}
@@ -867,7 +869,8 @@ mod transaction_monitor {
867869
pub async fn run(&mut self) {
868870
loop {
869871
if let Err(err) = self.handle_next().await {
870-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
872+
error!(self.logger, "{}", err);
873+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
871874
}
872875
}
873876
}

src/agent/solana/oracle.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ impl Oracle {
196196
pub async fn run(&mut self) {
197197
loop {
198198
if let Err(err) = self.handle_next().await {
199-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
199+
error!(self.logger, "{}", err);
200+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
200201
}
201202
}
202203
}
@@ -400,7 +401,8 @@ impl Poller {
400401
self.poll_interval.tick().await;
401402
info!(self.logger, "fetching all pyth account data");
402403
if let Err(err) = self.poll_and_send().await {
403-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
404+
error!(self.logger, "{}", err);
405+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
404406
}
405407
}
406408
}
@@ -661,14 +663,18 @@ mod subscriber {
661663
pub async fn run(&self) {
662664
match self.start_shadow().await {
663665
Ok(mut shadow_rx) => self.forward_updates(&mut shadow_rx).await,
664-
Err(err) => error!(self.logger, "{:#}", err; "error" => format!("{:?}", err)),
666+
Err(err) => {
667+
error!(self.logger, "{}", err);
668+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
669+
}
665670
}
666671
}
667672

668673
async fn forward_updates(&self, shadow_rx: &mut broadcast::Receiver<(Pubkey, Account)>) {
669674
loop {
670675
if let Err(err) = self.forward_update(shadow_rx).await {
671-
error!(self.logger, "error forwarding updates: {:#}", err; "error" => format!("{:?}", err))
676+
error!(self.logger, "{}", err);
677+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
672678
}
673679
}
674680
}

src/agent/store/global.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ impl From<oracle::ProductEntry> for ProductAccountMetadata {
7474
}
7575
}
7676

77-
7877
/// PriceAccountMetadata contains the metadata for a price account.
7978
#[derive(Debug, Clone)]
8079
pub struct PriceAccountMetadata {
@@ -185,7 +184,8 @@ impl Store {
185184
pub async fn run(&mut self) {
186185
loop {
187186
if let Err(err) = self.handle_next().await {
188-
error!(self.logger, "{:#}", err; "error" => format!("{:?}", err));
187+
error!(self.logger, "{}", err);
188+
debug!(self.logger, "error context"; "context" => format!("{:?}", err));
189189
}
190190
}
191191
}

0 commit comments

Comments
 (0)