12 namespace serac::logger {
16 namespace slic = axom::slic;
18 if (!slic::isInitialized()) {
25 slic::setIsRoot(rank == 0);
27 std::string loggerName = num_ranks > 1 ?
"serac_parallel_logger" :
"serac_serial_logger";
28 slic::createLogger(loggerName);
29 slic::activateLogger(loggerName);
30 if (!slic::activateLogger(loggerName)) {
32 std::cerr <<
"Error: Failed to activate logger: " << loggerName << std::endl;
37 slic::LogStream* i_logstream =
nullptr;
38 slic::LogStream* d_logstream =
nullptr;
39 slic::LogStream* we_logstream =
nullptr;
42 std::string i_format_string =
"<MESSAGE>\n";
43 std::string d_format_string =
"[<LEVEL>]: <MESSAGE>\n";
44 std::string we_format_string =
"[<LEVEL> (<FILE>:<LINE>)]\n<MESSAGE>\n\n";
50 i_format_string =
"[<RANK>] " + i_format_string;
51 d_format_string =
"[<RANK>]" + d_format_string;
52 we_format_string =
"[<RANK>]" + we_format_string;
56 i_logstream =
new slic::LumberjackStream(&std::cout, comm, RLIMIT, i_format_string);
57 d_logstream =
new slic::LumberjackStream(&std::cout, comm, RLIMIT, d_format_string);
58 we_logstream =
new slic::LumberjackStream(&std::cerr, comm, RLIMIT, we_format_string);
60 i_logstream =
new slic::GenericOutputStream(&std::cout, i_format_string);
61 d_logstream =
new slic::GenericOutputStream(&std::cout, d_format_string);
62 we_logstream =
new slic::GenericOutputStream(&std::cerr, we_format_string);
65 slic::setLoggingMsgLevel(slic::message::Debug);
68 addStreamToMsgLevel(i_logstream, slic::message::Info);
69 addStreamToMsgLevel(d_logstream, slic::message::Debug);
70 addStreamToMsgLevel(we_logstream, slic::message::Warning);
71 addStreamToMsgLevel(we_logstream, slic::message::Error);
77 slic::setAbortOnError(
true);
78 slic::setAbortOnWarning(
false);
80 std::string msg = axom::fmt::format(
"Logger activated: '{0}'", loggerName);
82 serac::logger::flush();
87 void finalize() { axom::slic::finalize(); }
89 void flush() { axom::slic::flushStreams(); }
A function intended to be used as part of a driver to initialize common libraries.
This file contains the all the necessary functions and macros required for logging as well as a helpe...
std::pair< int, int > initialize(int argc, char *argv[], MPI_Comm comm)
Initializes MPI, signal handling, and logging.
std::pair< int, int > getMPIInfo(MPI_Comm comm)
Returns the number of processes and rank for an MPI communicator.
Helper functions for exiting Serac cleanly.