mirror of https://github.com/PentHertz/srsLTE.git
- Rewrite log management so that a log sink can be swapped for each testcase.
This commit is contained in:
parent
1d71cf8557
commit
c178e362b8
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013-2020 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* This file is part of srsLTE.
|
||||||
|
*
|
||||||
|
* srsLTE is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* srsLTE is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* A copy of the GNU Affero General Public License can be found in
|
||||||
|
* the LICENSE file in the top-level directory of this distribution
|
||||||
|
* and at http://www.gnu.org/licenses/.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSUE_TTCN3_SWAPPABLE_LOG_H
|
||||||
|
#define SRSUE_TTCN3_SWAPPABLE_LOG_H
|
||||||
|
|
||||||
|
#include "srslte/common/logger_srslog_wrapper.h"
|
||||||
|
|
||||||
|
/// This is a log wrapper that allows hot swapping the underlying log instance.
|
||||||
|
class swappable_log : public srslte::logger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit swappable_log(std::unique_ptr<srslte::srslog_wrapper> log) : l(std::move(log)) {}
|
||||||
|
|
||||||
|
void log(unique_log_str_t msg) override
|
||||||
|
{
|
||||||
|
assert(l && "Missing log instance");
|
||||||
|
l->log(std::move(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Swaps the underlying log wrapper.
|
||||||
|
void swap_log(std::unique_ptr<srslte::srslog_wrapper> new_log) { l = std::move(new_log); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<srslte::srslog_wrapper> l;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SRSUE_TTCN3_SWAPPABLE_LOG_H
|
|
@ -26,6 +26,7 @@
|
||||||
#include "srslte/test/ue_test_interfaces.h"
|
#include "srslte/test/ue_test_interfaces.h"
|
||||||
#include "srslte/upper/pdcp.h"
|
#include "srslte/upper/pdcp.h"
|
||||||
#include "srslte/upper/rlc.h"
|
#include "srslte/upper/rlc.h"
|
||||||
|
#include "swappable_log.h"
|
||||||
#include "ttcn3_common.h"
|
#include "ttcn3_common.h"
|
||||||
#include "ttcn3_drb_interface.h"
|
#include "ttcn3_drb_interface.h"
|
||||||
#include "ttcn3_ip_ctrl_interface.h"
|
#include "ttcn3_ip_ctrl_interface.h"
|
||||||
|
@ -49,7 +50,7 @@ class ttcn3_syssim : public syssim_interface_phy,
|
||||||
public srslte::pdu_queue::process_callback
|
public srslte::pdu_queue::process_callback
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ttcn3_syssim(srslte::logger& logger_file_, srslte::logger& logger_stdout_, ttcn3_ue* ue_);
|
ttcn3_syssim(swappable_log& logger_file_, srslte::logger& logger_stdout_, ttcn3_ue* ue_);
|
||||||
|
|
||||||
~ttcn3_syssim();
|
~ttcn3_syssim();
|
||||||
|
|
||||||
|
@ -226,8 +227,8 @@ private:
|
||||||
|
|
||||||
// Logging stuff
|
// Logging stuff
|
||||||
srslte::logger& logger_stdout;
|
srslte::logger& logger_stdout;
|
||||||
std::unique_ptr<logger> test_case_logger;
|
swappable_log& logger_file;
|
||||||
srslte::logger* logger_ptr = nullptr;
|
srslte::logger* logger = nullptr;
|
||||||
srslte::log_ref log;
|
srslte::log_ref log;
|
||||||
srslte::log_filter ut_log;
|
srslte::log_filter ut_log;
|
||||||
srslte::log_filter sys_log;
|
srslte::log_filter sys_log;
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "srslte/build_info.h"
|
#include "srslte/build_info.h"
|
||||||
#include "srslte/common/logger_srslog_wrapper.h"
|
|
||||||
#include "srslte/common/logmap.h"
|
#include "srslte/common/logmap.h"
|
||||||
#include "srslte/srslog/srslog.h"
|
#include "srslte/srslog/srslog.h"
|
||||||
#include "srsue/hdr/ue.h"
|
#include "srsue/hdr/ue.h"
|
||||||
|
#include "swappable_log.h"
|
||||||
#include "ttcn3_syssim.h"
|
#include "ttcn3_syssim.h"
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
#include <boost/program_options/parsers.hpp>
|
#include <boost/program_options/parsers.hpp>
|
||||||
|
@ -137,8 +137,9 @@ int main(int argc, char** argv)
|
||||||
if (!stdout_chan) {
|
if (!stdout_chan) {
|
||||||
return SRSLTE_ERROR;
|
return SRSLTE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
swappable_log file_wrapper(std::unique_ptr<srslte::srslog_wrapper>(new srslte::srslog_wrapper(*file_chan)));
|
||||||
srslte::srslog_wrapper stdout_wrapper(*stdout_chan);
|
srslte::srslog_wrapper stdout_wrapper(*stdout_chan);
|
||||||
srslte::srslog_wrapper file_wrapper(*file_chan);
|
|
||||||
|
|
||||||
// Start the log backend.
|
// Start the log backend.
|
||||||
srslog::init();
|
srslog::init();
|
||||||
|
|
|
@ -37,13 +37,14 @@
|
||||||
#include "ttcn3_ut_interface.h"
|
#include "ttcn3_ut_interface.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
ttcn3_syssim::ttcn3_syssim(srslte::logger& logger_file_, srslte::logger& logger_stdout_, ttcn3_ue* ue_) :
|
ttcn3_syssim::ttcn3_syssim(swappable_log& logger_file_, srslte::logger& logger_stdout_, ttcn3_ue* ue_) :
|
||||||
log{"SS "},
|
log{"SS "},
|
||||||
mac_msg_ul(20, ss_mac_log),
|
mac_msg_ul(20, ss_mac_log),
|
||||||
mac_msg_dl(20, ss_mac_log),
|
mac_msg_dl(20, ss_mac_log),
|
||||||
pdus(128),
|
pdus(128),
|
||||||
logger_stdout(logger_stdout_),
|
logger_stdout(logger_stdout_),
|
||||||
logger_ptr(&logger_file_),
|
logger_file(logger_file_),
|
||||||
|
logger(&logger_file),
|
||||||
pool(byte_buffer_pool::get_instance()),
|
pool(byte_buffer_pool::get_instance()),
|
||||||
ue(ue_),
|
ue(ue_),
|
||||||
rlc(ss_rlc_log->get_service_name().c_str()),
|
rlc(ss_rlc_log->get_service_name().c_str()),
|
||||||
|
@ -51,7 +52,7 @@ ttcn3_syssim::ttcn3_syssim(srslte::logger& logger_file_, srslte::logger& logger_
|
||||||
timer_handler(create_tti_timer(), [&](uint64_t res) { new_tti_indication(res); }),
|
timer_handler(create_tti_timer(), [&](uint64_t res) { new_tti_indication(res); }),
|
||||||
pdcp(&stack.task_sched, ss_pdcp_log->get_service_name().c_str())
|
pdcp(&stack.task_sched, ss_pdcp_log->get_service_name().c_str())
|
||||||
{
|
{
|
||||||
if (ue->init(all_args_t{}, logger_ptr, this, "INIT_TEST") != SRSLTE_SUCCESS) {
|
if (ue->init(all_args_t{}, logger, this, "INIT_TEST") != SRSLTE_SUCCESS) {
|
||||||
ue->stop();
|
ue->stop();
|
||||||
fprintf(stderr, "Couldn't initialize UE.\n");
|
fprintf(stderr, "Couldn't initialize UE.\n");
|
||||||
}
|
}
|
||||||
|
@ -65,20 +66,20 @@ int ttcn3_syssim::init(const all_args_t& args_)
|
||||||
|
|
||||||
// Make sure to get SS logging as well
|
// Make sure to get SS logging as well
|
||||||
if (args.log.filename == "stdout") {
|
if (args.log.filename == "stdout") {
|
||||||
logger_ptr = &logger_stdout;
|
logger = &logger_stdout;
|
||||||
}
|
}
|
||||||
srslte::logmap::set_default_logger(logger_ptr);
|
srslte::logmap::set_default_logger(logger);
|
||||||
|
|
||||||
// init and configure logging
|
// init and configure logging
|
||||||
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS ", logger_ptr, true}});
|
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS ", logger, true}});
|
||||||
ut_log.init("UT ", logger_ptr);
|
ut_log.init("UT ", logger);
|
||||||
sys_log.init("SYS ", logger_ptr);
|
sys_log.init("SYS ", logger);
|
||||||
ip_sock_log.init("IP_S", logger_ptr);
|
ip_sock_log.init("IP_S", logger);
|
||||||
ip_ctrl_log.init("IP_C", logger_ptr);
|
ip_ctrl_log.init("IP_C", logger);
|
||||||
srb_log.init("SRB ", logger_ptr);
|
srb_log.init("SRB ", logger);
|
||||||
drb_log.init("DRB ", logger_ptr);
|
drb_log.init("DRB ", logger);
|
||||||
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS-RLC", logger_ptr}});
|
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS-RLC", logger}});
|
||||||
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS-PDCP", logger_ptr}});
|
srslte::logmap::register_log(std::unique_ptr<srslte::log>{new log_filter{"SS-PDCP", logger}});
|
||||||
|
|
||||||
log->set_level(args.log.all_level);
|
log->set_level(args.log.all_level);
|
||||||
ut_log.set_level(args.log.all_level);
|
ut_log.set_level(args.log.all_level);
|
||||||
|
@ -407,13 +408,14 @@ void ttcn3_syssim::tc_start(const char* name)
|
||||||
|
|
||||||
// set up logging
|
// set up logging
|
||||||
if (args.log.filename == "stdout") {
|
if (args.log.filename == "stdout") {
|
||||||
logger_ptr = &logger_stdout;
|
logger = &logger_stdout;
|
||||||
} else {
|
} else {
|
||||||
|
// Create a new log wrapper that writes to the new test case file and swap it with the old one.
|
||||||
const std::string& file_tc_name = get_filename_with_tc_name(local_args.log.filename, run_id, tc_name);
|
const std::string& file_tc_name = get_filename_with_tc_name(local_args.log.filename, run_id, tc_name);
|
||||||
srslog::sink* s = srslog::create_file_sink(file_tc_name);
|
srslog::sink* s = srslog::create_file_sink(file_tc_name);
|
||||||
srslog::log_channel* c = srslog::create_log_channel(file_tc_name, *s);
|
srslog::log_channel* c = srslog::create_log_channel(file_tc_name, *s);
|
||||||
test_case_logger = std::unique_ptr<srslte::logger>(new srslte::srslog_wrapper(*c));
|
logger_file.swap_log(std::unique_ptr<srslte::srslog_wrapper>(new srslte::srslog_wrapper(*c)));
|
||||||
logger_ptr = test_case_logger.get();
|
logger = &logger_file;
|
||||||
}
|
}
|
||||||
|
|
||||||
log->info("Initializing UE ID=%d for TC=%s\n", run_id, tc_name.c_str());
|
log->info("Initializing UE ID=%d for TC=%s\n", run_id, tc_name.c_str());
|
||||||
|
@ -424,7 +426,7 @@ void ttcn3_syssim::tc_start(const char* name)
|
||||||
local_args.stack.pcap.nas_filename = get_filename_with_tc_name(args.stack.pcap.nas_filename, run_id, tc_name);
|
local_args.stack.pcap.nas_filename = get_filename_with_tc_name(args.stack.pcap.nas_filename, run_id, tc_name);
|
||||||
|
|
||||||
// bring up UE
|
// bring up UE
|
||||||
if (ue->init(local_args, logger_ptr, this, tc_name)) {
|
if (ue->init(local_args, logger, this, tc_name)) {
|
||||||
ue->stop();
|
ue->stop();
|
||||||
std::string err("Couldn't initialize UE.\n");
|
std::string err("Couldn't initialize UE.\n");
|
||||||
log->error("%s\n", err.c_str());
|
log->error("%s\n", err.c_str());
|
||||||
|
|
Loading…
Reference in New Issue