1313 * @brief
1414 */
1515
16+ #include " shambase/stacktrace.hpp"
1617#include " shambase/term_colors.hpp"
1718#include " shamcmdopt/env.hpp"
1819#include " shamcmdopt/tty.hpp"
@@ -186,6 +187,74 @@ namespace logformatter {
186187 shambase::term_colors::bold ());
187188 }
188189
190+
191+ /* *
192+ * @brief Log formatter for style 3, full details + time
193+ *
194+ * @param args The arguments for the log formatter
195+ * @return std::string The formatted log
196+ */
197+ std::string style4_formatter_full (const logger::ReformatArgs &args) {
198+
199+ u32 tty_width = shamcmdopt::get_tty_columns ();
200+
201+ std::string ansi_reset = shambase::term_colors::reset ();
202+ std::string ansi_faint = shambase::term_colors::faint ();
203+
204+ std::string lineend = shambase::format (
205+ " {5:} [{3:}][rank={6:}][{7:.2f}s]{2:}" ,
206+ args.color ,
207+ args.level_name ,
208+ ansi_reset,
209+ args.module_name ,
210+ args.content ,
211+ ansi_faint,
212+ shamcomm::world_rank (),
213+ shambase::details::get_wtime ());
214+
215+ std::string log = shambase::format (
216+ " {0:}{1:}{2:}: {4:}" ,
217+ args.color ,
218+ args.level_name ,
219+ ansi_reset,
220+ args.module_name ,
221+ args.content ,
222+ ansi_faint,
223+ shamcomm::world_rank ());
224+
225+ std::string log_line1, log_line2;
226+ size_t first_nl = log.find_first_of (' \n ' );
227+ if (first_nl != std::string::npos) {
228+ log_line1 = log.substr (0 , first_nl);
229+ log_line2 = log.substr (first_nl);
230+ } else {
231+ log_line1 = log;
232+ log_line2 = " " ;
233+ }
234+
235+ u32 ansi_count = ansi_reset.size () * 2 + ansi_faint.size () + args.color .size ();
236+
237+ return shambase::format (" {:<{}}" , log_line1, tty_width - lineend.size () + ansi_count - 1 )
238+ + lineend + log_line2;
239+ }
240+
241+ /* *
242+ * @brief Log formatter for style 3, simple details + time
243+ *
244+ * @param args The arguments for the log formatter
245+ * @return std::string The formatted log
246+ */
247+ std::string style4_formatter_simple (const logger::ReformatArgs &args) {
248+ return shambase::format (
249+ " {5:}{3:}{2:}: {4:}" ,
250+ args.color ,
251+ args.level_name ,
252+ shambase::term_colors::reset (),
253+ args.module_name ,
254+ args.content ,
255+ shambase::term_colors::bold ());
256+ }
257+
189258 /* *
190259 * @brief The callback called when an exception is thrown
191260 *
@@ -201,7 +270,7 @@ namespace logformatter {
201270} // namespace logformatter
202271
203272std::string SHAMLOGFORMATTER = shamcmdopt::getenv_str_default_register(
204- " SHAMLOGFORMATTER" , " 3" , " Change the log formatter (values :0-3 ) [default: 3]" );
273+ " SHAMLOGFORMATTER" , " 3" , " Change the log formatter (values :0-4 ) [default: 3]" );
205274
206275std::string SHAMLOG_ERR_ON_EXCEPT = shamcmdopt::getenv_str_default_register(
207276 " SHAMLOG_ERR_ON_EXCEPT" , " 1" , " Enable logging of exceptions (default to 1)" );
@@ -224,6 +293,9 @@ namespace shamsys {
224293 } else if (SHAMLOGFORMATTER == " 3" ) {
225294 logger::change_formaters (
226295 logformatter::style3_formatter_full, logformatter::style3_formatter_simple);
296+ }else if (SHAMLOGFORMATTER == " 4" ) {
297+ logger::change_formaters (
298+ logformatter::style4_formatter_full, logformatter::style4_formatter_simple);
227299 } else {
228300 logger::err_ln (" Log" , " Unknown formatter" );
229301 shambase::throw_unimplemented (" Unknown formatter" );
0 commit comments