Skip to content

Commit

Permalink
tquic_tools support writting log to file.
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaofei0800 committed Jan 24, 2024
1 parent 5056b14 commit c98b96e
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 7 deletions.
12 changes: 6 additions & 6 deletions interop/run_endpoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ COPA)
;;
esac

COMMON_ARGS="--keylog-file $SSLKEYLOGFILE --qlog-dir $QLOG_DIR --log-level TRACE --idle-timeout 30000 --handshake-timeout 30000 --congestion-control-algor $CC_ALGOR"
COMMON_ARGS="--keylog-file $SSLKEYLOGFILE --qlog-dir $QLOG_DIR --log-level TRACE --log-file $LOG_DIR/$ROLE.log --idle-timeout 30000 --handshake-timeout 30000 --congestion-control-algor $CC_ALGOR"

if [ "$ROLE" == "client" ]; then
# Wait for the simulator to start up.
Expand Down Expand Up @@ -92,15 +92,15 @@ if [ "$ROLE" == "client" ]; then
CLIENT_ARGS="$CLIENT_ARGS --initial-rtt 100"
for REQ in $REQUESTS
do
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS $REQ >> $LOG_DIR/$ROLE.log 2>&1
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS $REQ
done
;;
zerortt)
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS ${REQS[0]} > $LOG_DIR/$ROLE.log 2>&1
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS ${REQS[@]:1} >> $LOG_DIR/$ROLE.log 2>&1
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS ${REQS[0]}
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS ${REQS[@]:1}
;;
*)
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS $REQUESTS > $LOG_DIR/$ROLE.log 2>&1
$TQUIC_DIR/$TQUIC_CLIENT $CLIENT_ARGS $REQUESTS
;;
esac
elif [ "$ROLE" == "server" ]; then
Expand All @@ -118,5 +118,5 @@ elif [ "$ROLE" == "server" ]; then
*)
;;
esac
$TQUIC_DIR/$TQUIC_SERVER $SERVER_ARGS > $LOG_DIR/$ROLE.log 2>&1
$TQUIC_DIR/$TQUIC_SERVER $SERVER_ARGS
fi
5 changes: 5 additions & 0 deletions tools/src/bin/tquic_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ pub struct ClientOpt {
#[clap(long, default_value = "INFO", value_name = "STR")]
pub log_level: log::LevelFilter,

/// Log file path. If no file is specified, logs will be written to `stderr`.
#[clap(long, value_name = "FILE")]
pub log_file: Option<String>,

/// Override server's address.
#[clap(short, long, value_name = "ADDR")]
pub connect_to: Option<SocketAddr>,
Expand Down Expand Up @@ -1406,6 +1410,7 @@ fn parse_option() -> std::result::Result<ClientOpt, clap::error::Error> {

fn process_option(option: &mut ClientOpt) -> Result<()> {
env_logger::builder()
.target(tquic_tools::log_target(&option.log_file)?)
.filter_level(option.log_level)
.format_timestamp_millis()
.init();
Expand Down
5 changes: 5 additions & 0 deletions tools/src/bin/tquic_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ pub struct ServerOpt {
#[clap(long, default_value = "INFO")]
pub log_level: log::LevelFilter,

/// Log file path. If no file is specified, logs will be written to `stderr`.
#[clap(long, value_name = "FILE")]
pub log_file: Option<String>,

/// Address to listen.
#[clap(short, long, default_value = "0.0.0.0:4433", value_name = "ADDR")]
pub listen: SocketAddr,
Expand Down Expand Up @@ -766,6 +770,7 @@ impl TransportHandler for ServerHandler {

fn process_option(option: &mut ServerOpt) -> Result<()> {
env_logger::builder()
.target(tquic_tools::log_target(&option.log_file)?)
.filter_level(option.log_level)
.format_timestamp_millis()
.init();
Expand Down
19 changes: 18 additions & 1 deletion tools/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ use std::net::SocketAddr;

use clap::builder::PossibleValue;
use clap::ValueEnum;
use log::debug;
use env_logger::Target;
use log::*;
use mio::net::UdpSocket;
use mio::Interest;
use mio::Registry;
Expand Down Expand Up @@ -222,3 +223,19 @@ impl PacketSendHandler for QuicSocket {
Ok(count)
}
}

/// Get the target for the log output.
pub fn log_target(log_file: &Option<String>) -> Result<Target> {
if let Some(log_file) = log_file {
if let Ok(file) = std::fs::OpenOptions::new()
.create(true)
.append(true)
.open(log_file)
{
return Ok(Target::Pipe(Box::new(file)));
}
return Err(format!("create log file {:?} failed", log_file).into());
}

Ok(Target::Stderr)
}

0 comments on commit c98b96e

Please sign in to comment.