Skip to content

Commit ce1b1d0

Browse files
Expose log-to-std, fix log timestamp.[CPP-109]
1 parent 46f8eed commit ce1b1d0

File tree

9 files changed

+40
-25
lines changed

9 files changed

+40
-25
lines changed

console_backend/src/baseline_tab.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ impl<S: CapnProtoSender> BaselineTab<S> {
303303
flags: baseline_ned_fields.flags,
304304
num_sats: baseline_ned_fields.n_sats,
305305
}) {
306-
eprintln!("Unable to to write to baseline log, error {}.", err);
306+
error!("Unable to to write to baseline log, error {}.", err);
307307
}
308308
}
309309
}

console_backend/src/bin/headless-console.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Usage:
2929
let (_server_send, server_recv) = channel::unbounded::<Vec<u8>>();
3030
let client_send = ClientSender::new(client_send_);
3131
let shared_state = SharedState::new();
32-
setup_logging(client_send.clone(), shared_state.clone(), true);
32+
setup_logging(client_send.clone(), shared_state.clone());
3333
let conn_manager = ConnectionManager::new(client_send.clone(), shared_state.clone());
3434
handle_cli(opt, &conn_manager, shared_state.clone());
3535
refresh_connection_frontend(&mut client_send.clone(), shared_state.clone());

console_backend/src/cli_options.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ pub struct CliOptions {
8888
#[clap(subcommand)]
8989
pub input: Option<Input>,
9090

91+
/// Log messages to terminal.
92+
#[clap(long = "log-to-std")]
93+
pub log_to_std: bool,
94+
9195
/// Exit when connection closes.
9296
#[clap(long = "exit-after")]
9397
pub exit_after: bool,
@@ -150,7 +154,7 @@ impl CliOptions {
150154
/// - `filtered_args`: The filtered args parsed via CliOptions.
151155
pub fn from_filtered_cli() -> CliOptions {
152156
let args = std::env::args();
153-
debug!("args {:?}", args);
157+
eprintln!("args {:?}", args);
154158
let mut next_args = std::env::args().skip(1);
155159
let mut filtered_args: Vec<String> = vec![];
156160
for arg in args.filter(|a| !matches!(a.as_str(), "swiftnav_console.main" | "-m" | "--")) {
@@ -168,7 +172,7 @@ impl CliOptions {
168172
}
169173
filtered_args.push(arg);
170174
}
171-
debug!("filtered_args: {:?}", filtered_args);
175+
debug!("filtered_args: {:?}", &filtered_args[1..]);
172176
CliOptions::parse_from(filtered_args)
173177
}
174178
}
@@ -306,6 +310,7 @@ pub fn handle_cli(opt: CliOptions, conn_manager: &ConnectionManager, shared_stat
306310
shared_state.set_log_level(log_level);
307311
let mut shared_data = shared_state.lock().expect(SHARED_STATE_LOCK_MUTEX_FAILURE);
308312
(*shared_data).logging_bar.csv_logging = CsvLogging::from(opt.csv_log);
313+
(*shared_data).log_to_std.set(opt.log_to_std);
309314
if let Some(sbp_log) = opt.sbp_log {
310315
(*shared_data).logging_bar.sbp_logging_format =
311316
SbpLogging::from_str(&sbp_log.to_string()).expect(CONVERT_TO_STR_FAILURE);

console_backend/src/log_panel.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::common_constants as cc;
77
use crate::constants::LOG_WRITER_BUFFER_MESSAGE_COUNT;
88
use crate::errors::CONSOLE_LOG_JSON_TO_STRING_FAILURE;
99
use crate::shared_state::SharedState;
10-
use crate::types::{CapnProtoSender, ClientSender};
10+
use crate::types::{ArcBool, CapnProtoSender, ClientSender};
1111
use crate::utils::serialize_capnproto_builder;
1212

1313
use async_logger::Writer;
@@ -44,7 +44,7 @@ pub fn splitable_log_formatter(record: &Record) -> String {
4444
} else {
4545
record.level().as_str()
4646
};
47-
let timestamp = Local::now().format("%Y-%m-%dT%H:%M:%S");
47+
let timestamp = Local::now().format("%b %d %Y %H:%M:%S");
4848
let mut msg = record.args().to_string();
4949
msg.retain(|c| c != '\0');
5050
let msg_packet = ConsoleLogPacket {
@@ -97,8 +97,8 @@ pub fn handle_log_msg(msg: MsgLog) {
9797
}
9898
}
9999

100-
pub fn setup_logging(client_sender: ClientSender, shared_state: SharedState, debug: bool) {
101-
let log_panel = LogPanelWriter::new(client_sender, shared_state, debug);
100+
pub fn setup_logging(client_sender: ClientSender, shared_state: SharedState) {
101+
let log_panel = LogPanelWriter::new(client_sender, shared_state);
102102
let logger = Logger::builder()
103103
.buf_size(LOG_WRITER_BUFFER_MESSAGE_COUNT)
104104
.formatter(splitable_log_formatter)
@@ -107,21 +107,22 @@ pub fn setup_logging(client_sender: ClientSender, shared_state: SharedState, deb
107107
.unwrap();
108108

109109
log::set_boxed_logger(Box::new(logger)).expect("Failed to set logger");
110+
log::set_max_level(LevelFilter::Debug);
110111
}
111112

112113
#[derive(Debug)]
113114
pub struct LogPanelWriter<S: CapnProtoSender> {
114115
pub client_sender: S,
115116
shared_state: SharedState,
116-
pub debug: bool,
117+
pub log_to_std: ArcBool,
117118
}
118119

119120
impl<S: CapnProtoSender> LogPanelWriter<S> {
120-
pub fn new(client_sender: S, shared_state: SharedState, debug: bool) -> LogPanelWriter<S> {
121+
pub fn new(client_sender: S, shared_state: SharedState) -> LogPanelWriter<S> {
121122
LogPanelWriter {
122123
client_sender,
124+
log_to_std: shared_state.log_to_std(),
123125
shared_state,
124-
debug,
125126
}
126127
}
127128
}
@@ -140,12 +141,14 @@ impl<S: CapnProtoSender> Writer<Box<String>> for LogPanelWriter<S> {
140141
let mut entries = log_update.init_entries(slice.len() as u32);
141142

142143
for (idx, item) in slice.iter().enumerate() {
143-
if self.debug {
144-
eprintln!("{}", item);
144+
let packet: ConsoleLogPacket =
145+
serde_json::from_str(item).expect(CONSOLE_LOG_JSON_TO_STRING_FAILURE);
146+
if self.log_to_std.get() {
147+
eprintln!("{}\t{}\t{}", packet.timestamp, packet.level, packet.msg);
145148
}
146149
let mut entry = entries.reborrow().get(idx as u32);
147150

148-
entry.set_line(&**item);
151+
entry.set_line(item);
149152
}
150153

151154
self.client_sender

console_backend/src/process_messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ where
180180
});
181181

182182
link.register(|_: MsgObsDepA| {
183-
println!("The message type, MsgObsDepA, is not handled in the Tracking->SignalsPlot or Observation tab.");
183+
debug!("The message type, MsgObsDepA, is not handled in the Tracking->SignalsPlot or Observation tab.");
184184
});
185185

186186
link.register(|tabs: &Tabs<S>, msg: MsgOrientEuler| {

console_backend/src/server.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crossbeam::channel;
2+
use log::debug;
23
use pyo3::exceptions;
34
use pyo3::prelude::*;
45
use pyo3::types::PyBytes;
@@ -82,17 +83,17 @@ impl Server {
8283
if self.client_sender.as_ref().unwrap().connected.get() {
8384
continue;
8485
} else {
85-
eprintln!("shutting down");
86+
debug!("shutting down");
8687
break None;
8788
}
8889
} else {
89-
eprintln!("client recv disconnected");
90+
debug!("client recv disconnected");
9091
break None;
9192
}
9293
}
9394
}
9495
} else {
95-
eprintln!("no client receive endpoint");
96+
debug!("no client receive endpoint");
9697
break None;
9798
}
9899
});
@@ -110,7 +111,7 @@ impl Server {
110111
server_send: Some(server_send),
111112
};
112113
let shared_state = SharedState::new();
113-
setup_logging(client_send.clone(), shared_state.clone(), false);
114+
setup_logging(client_send.clone(), shared_state.clone());
114115
let opt = CliOptions::from_filtered_cli();
115116
if let Some(ref path) = opt.settings_yaml {
116117
sbp_settings::settings::load_from_path(path).expect("failed to load settings");

console_backend/src/server_recv_thread.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::utils::refresh_connection_frontend;
1616
use capnp::serialize;
1717
use chrono::{DateTime, Utc};
1818
use crossbeam::channel;
19-
use log::error;
19+
use log::{debug, error};
2020
use std::{io::Cursor, path::PathBuf, str::FromStr, thread};
2121
pub type Error = anyhow::Error;
2222
pub type Result<T> = anyhow::Result<T>;
@@ -334,7 +334,7 @@ pub fn server_recv_thread(
334334
}
335335
}
336336
}
337-
eprintln!("client recv loop shutdown");
337+
debug!("client recv loop shutdown");
338338
client_send.connected.set(false);
339339
});
340340
}

console_backend/src/shared_state.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::output::{CsvLogging, CsvSerializer};
1010
use crate::process_messages::StopToken;
1111
use crate::settings_tab;
1212
use crate::solution_tab::LatLonUnits;
13-
use crate::types::CapnProtoSender;
13+
use crate::types::{ArcBool, CapnProtoSender};
1414
use crate::update_tab::UpdateTabUpdate;
1515
use crate::utils::send_conn_state;
1616
use crate::watch::{WatchReceiver, Watched};
@@ -356,6 +356,10 @@ impl SharedState {
356356
(*shared_data).auto_survey_data.alt = Some(alt);
357357
(*shared_data).auto_survey_data.requested = false;
358358
}
359+
pub fn log_to_std(&self) -> ArcBool {
360+
let shared_data = self.lock().expect(SHARED_STATE_LOCK_MUTEX_FAILURE);
361+
(*shared_data).log_to_std.clone()
362+
}
359363
}
360364

361365
impl Deref for SharedState {
@@ -401,6 +405,7 @@ pub struct SharedStateInner {
401405
pub(crate) advanced_networking_update: Option<AdvancedNetworkingState>,
402406
pub(crate) auto_survey_data: AutoSurveyData,
403407
pub(crate) sbp_logging_stats_state: Option<SbpLoggingStatsState>,
408+
pub(crate) log_to_std: ArcBool,
404409
}
405410
impl SharedStateInner {
406411
pub fn new() -> SharedStateInner {
@@ -427,6 +432,7 @@ impl SharedStateInner {
427432
advanced_networking_update: None,
428433
auto_survey_data: AutoSurveyData::new(),
429434
sbp_logging_stats_state: None,
435+
log_to_std: ArcBool::new_with(true),
430436
}
431437
}
432438
}

console_backend/src/solution_tab.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use capnp::message::Builder;
2-
2+
use log::error;
33
use sbp::messages::{
44
navigation::{MsgAgeCorrections, MsgPosLlhCov, MsgUtcTime},
55
orientation::{MsgAngularRate, MsgOrientEuler},
@@ -360,7 +360,7 @@ impl<S: CapnProtoSender> SolutionTab<S> {
360360
flags: vel_ned_fields.flags,
361361
num_signals: vel_ned_fields.n_sats,
362362
}) {
363-
eprintln!("Unable to to write to vel log, error {}.", err);
363+
error!("Unable to to write to vel log, error {}.", err);
364364
}
365365
}
366366
}
@@ -532,7 +532,7 @@ impl<S: CapnProtoSender> SolutionTab<S> {
532532
n_sats: pos_llh_fields.n_sats,
533533
flags: pos_llh_fields.flags,
534534
}) {
535-
eprintln!("Unable to to write to pos llh log, error {}.", err);
535+
error!("Unable to to write to pos llh log, error {}.", err);
536536
}
537537
}
538538
}

0 commit comments

Comments
 (0)