on master help sign in
dap: logging using fern
fd709bcDmitry Sharshakov
Cargo.lock+1
@@ -327,6 +327,7 @@ name = "helix-dap"
327version = "0.3.0"
327version = "0.3.0"
328dependencies = [
328dependencies = [
329 "anyhow",
329 "anyhow",
330+ "fern",
330 "log",
331 "log",
331 "serde",
332 "serde",
332 "serde_json",
333 "serde_json",
helix-dap/Cargo.toml+3
@@ -18,3 +18,6 @@ serde = { version = "1.0", features = ["derive"] }
18serde_json = "1.0"
18serde_json = "1.0"
19thiserror = "1.0"
19thiserror = "1.0"
20tokio = { version = "1.9", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot"] }
20tokio = { version = "1.9", features = ["rt", "rt-multi-thread", "io-util", "io-std", "time", "process", "macros", "fs", "parking_lot"] }
21+
22+[dev-dependencies]
23+fern = "0.6"
helix-dap/examples/dap-basic.rs+11
@@ -2,6 +2,17 @@ use helix_dap::{Client, Result, SourceBreakpoint};
2
2
3#[tokio::main]
3#[tokio::main]
4pub async fn main() -> Result<()> {
4pub async fn main() -> Result<()> {
5+ let base_config = fern::Dispatch::new().level(log::LevelFilter::Info);
6+
7+ let stderr_config = fern::Dispatch::new()
8+ .format(|out, message, record| out.finish(format_args!("[{}] {}", record.level(), message)))
9+ .chain(std::io::stderr());
10+
11+ base_config
12+ .chain(stderr_config)
13+ .apply()
14+ .expect("Failed to set up logging");
15+
5 let mut client = Client::start("nc", vec!["127.0.0.1", "7777"], 0)?;
16 let mut client = Client::start("nc", vec!["127.0.0.1", "7777"], 0)?;
6
17
7 println!("init: {:?}", client.initialize().await);
18 println!("init: {:?}", client.initialize().await);
helix-dap/src/transport.rs+7−13
@@ -1,6 +1,6 @@
1use crate::{Error, Result};
1use crate::{Error, Result};
2use anyhow::Context;
2use anyhow::Context;
3−use log::error;
3+use log::{error, info};
4use serde::{Deserialize, Serialize};
4use serde::{Deserialize, Serialize};
5use serde_json::Value;
5use serde_json::Value;
6use std::collections::HashMap;
6use std::collections::HashMap;
@@ -123,8 +123,7 @@ impl Transport {
123 reader.read_exact(&mut content).await?;
123 reader.read_exact(&mut content).await?;
124 let msg = std::str::from_utf8(&content).context("invalid utf8 from server")?;
124 let msg = std::str::from_utf8(&content).context("invalid utf8 from server")?;
125
125
126− // TODO: `info!` here
127− println!("<- DAP {}", msg);
126+ info!("<- DAP {}", msg);
128
127
129 // try parsing as output (server response) or call (server request)
128 // try parsing as output (server response) or call (server request)
130 let output: serde_json::Result<Payload> = serde_json::from_str(msg);
129 let output: serde_json::Result<Payload> = serde_json::from_str(msg);
@@ -153,8 +152,7 @@ impl Transport {
153 server_stdin: &mut BufWriter<ChildStdin>,
152 server_stdin: &mut BufWriter<ChildStdin>,
154 request: String,
153 request: String,
155 ) -> Result<()> {
154 ) -> Result<()> {
156− // TODO: `info!` here
157− println!("-> DAP {}", request);
155+ info!("-> DAP {}", request);
158
156
159 // send the headers
157 // send the headers
160 server_stdin
158 server_stdin
@@ -181,8 +179,7 @@ impl Transport {
181 request_seq,
179 request_seq,
182 ..
180 ..
183 }) => {
181 }) => {
184− // TODO: `info!` here
185− println!("<- DAP success ({}, in response to {})", seq, request_seq);
182+ info!("<- DAP success ({}, in response to {})", seq, request_seq);
186 if let Payload::Response(val) = msg {
183 if let Payload::Response(val) = msg {
187 (request_seq, Ok(val))
184 (request_seq, Ok(val))
188 } else {
185 } else {
@@ -197,8 +194,7 @@ impl Transport {
197 command,
194 command,
198 ..
195 ..
199 }) => {
196 }) => {
200− // TODO: `error!` here
197+ error!(
201− println!(
202 "<- DAP error {:?} ({:?}) for command #{} {}",
198 "<- DAP error {:?} ({:?}) for command #{} {}",
203 message, body, request_seq, command
199 message, body, request_seq, command
204 );
200 );
@@ -212,16 +208,14 @@ impl Transport {
212 ref seq,
208 ref seq,
213 ..
209 ..
214 }) => {
210 }) => {
215− // TODO: `info!` here
216− println!("<- DAP request {} #{}", command, seq);
211+ info!("<- DAP request {} #{}", command, seq);
217 client_tx.send(msg).expect("Failed to send");
212 client_tx.send(msg).expect("Failed to send");
218 return Ok(());
213 return Ok(());
219 }
214 }
220 Payload::Event(Event {
215 Payload::Event(Event {
221 ref event, ref seq, ..
216 ref event, ref seq, ..
222 }) => {
217 }) => {
223− // TODO: `info!` here
224− println!("<- DAP event {} #{}", event, seq);
218+ info!("<- DAP event {} #{}", event, seq);
225 client_tx.send(msg).expect("Failed to send");
219 client_tx.send(msg).expect("Failed to send");
226 return Ok(());
220 return Ok(());
227 }
221 }