blob: 4874c77373ebb3fcc12348aa7f0e2ff97ef0b287 [file] [log] [blame]
Austin Schuh47aabde2020-10-10 17:46:37 -07001#include <sys/resource.h>
2#include <sys/time.h>
3
James Kuszmaul38735e82019-12-07 16:42:06 -08004#include "aos/configuration.h"
Austin Schuhb06f03b2021-02-17 22:00:37 -08005#include "aos/events/logging/log_writer.h"
James Kuszmauldd0a5042021-10-28 23:38:04 -07006#include "aos/events/logging/snappy_encoder.h"
James Kuszmaul38735e82019-12-07 16:42:06 -08007#include "aos/events/shm_event_loop.h"
8#include "aos/init.h"
Brian Silvermand90905f2020-09-23 14:42:56 -07009#include "aos/logging/log_namer.h"
James Kuszmaul38735e82019-12-07 16:42:06 -080010#include "gflags/gflags.h"
11#include "glog/logging.h"
12
James Kuszmaul38735e82019-12-07 16:42:06 -080013DEFINE_string(config, "config.json", "Config file to use.");
14
Austin Schuh27553152020-11-18 21:26:37 -080015DEFINE_bool(skip_renicing, false,
16 "If true, skip renicing the logger. This leaves it lower priority "
17 "and increases the likelihood of dropping messages and crashing.");
18
James Kuszmauldd0a5042021-10-28 23:38:04 -070019DEFINE_bool(snappy_compress, false, "If true, compress log data using snappy.");
20
James Kuszmaul38735e82019-12-07 16:42:06 -080021int main(int argc, char *argv[]) {
22 gflags::SetUsageMessage(
23 "This program provides a simple logger binary that logs all SHMEM data "
24 "directly to a file specified at the command line. It does not manage "
25 "filenames, so it will just crash if you attempt to overwrite an "
26 "existing file, and the user must specify the logfile manually at the "
27 "command line.");
28 aos::InitGoogle(&argc, &argv);
29
30 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
31 aos::configuration::ReadConfig(FLAGS_config);
32
33 aos::ShmEventLoop event_loop(&config.message());
34
James Kuszmauldd0a5042021-10-28 23:38:04 -070035 std::unique_ptr<aos::logger::MultiNodeLogNamer> log_namer;
Milind Upadhyayd3a7bdc2020-12-26 16:07:03 -080036 log_namer = std::make_unique<aos::logger::MultiNodeLogNamer>(
Austin Schuha499cea2021-07-31 19:49:53 -070037 absl::StrCat(aos::logging::GetLogName("fbs_log"), "/"), &event_loop);
Austin Schuhcde938c2020-02-02 17:30:07 -080038
James Kuszmauldd0a5042021-10-28 23:38:04 -070039 if (FLAGS_snappy_compress) {
40 log_namer->set_extension(aos::logger::SnappyDecoder::kExtension);
41 log_namer->set_encoder_factory(
42 []() { return std::make_unique<aos::logger::SnappyEncoder>(); });
43 }
44
Brian Silverman1f345222020-09-24 21:14:48 -070045 aos::logger::Logger logger(&event_loop);
Austin Schuh47aabde2020-10-10 17:46:37 -070046 event_loop.OnRun([&log_namer, &logger]() {
Austin Schuh27553152020-11-18 21:26:37 -080047 if (FLAGS_skip_renicing) {
48 LOG(WARNING) << "Ignoring request to renice to -20 due to "
49 "--skip_renicing.";
50 } else {
51 errno = 0;
52 setpriority(PRIO_PROCESS, 0, -20);
53 PCHECK(errno == 0)
54 << ": Renicing to -20 failed, use --skip_renicing to skip renicing.";
55 }
Austin Schuh47aabde2020-10-10 17:46:37 -070056 logger.StartLogging(std::move(log_namer));
57 });
James Kuszmaul38735e82019-12-07 16:42:06 -080058
59 event_loop.Run();
60
Austin Schuh2f8fd752020-09-01 22:38:28 -070061 LOG(INFO) << "Shutting down";
62
James Kuszmaul38735e82019-12-07 16:42:06 -080063 return 0;
64}