diff --git a/python/remage/logging.py b/python/remage/logging.py index 99826785..f7d8f594 100644 --- a/python/remage/logging.py +++ b/python/remage/logging.py @@ -65,12 +65,23 @@ def setup_log() -> logging.Logger: logger.setLevel(logging.DEBUG) logger.propagate = False - if supports_color(): - fmt = "%(log_color)s[%(levelname)-7s ->%(reset)s %(message)s" + # Avoid adding duplicate handlers if setup_log() is called multiple times. + if not any(getattr(h, "_remage_default_handler", False) for h in logger.handlers): + # Keep the visible formatting identical between colored and non-colored output. + plain_fmt = "[%(levelname)-7s -> %(message)s" + colored_fmt = "%(log_color)s[%(levelname)-7s ->%(reset)s %(message)s" + + if supports_color(): + handler = colorlog.StreamHandler() + handler.setFormatter( + colorlog.ColoredFormatter(colored_fmt, log_colors=LEVEL_COLORS) + ) + else: + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter(plain_fmt)) - handler = colorlog.StreamHandler() - handler.setFormatter(colorlog.ColoredFormatter(fmt, log_colors=LEVEL_COLORS)) handler.setLevel(logging.DEBUG) + handler._remage_default_handler = True # type: ignore[attr-defined] logger.addHandler(handler) set_logging_level(logger, "Summary") @@ -96,7 +107,7 @@ def supports_color() -> bool: "vt100", "xterm", ] - return sys.stderr.isatty() and any(term in t for t in terms) + return sys.stderr.isatty() and term is not None and any(t in term for t in terms) def set_logging_level(logger, rmg_log_level): diff --git a/src/RMGManager.cc b/src/RMGManager.cc index 87ff5bfd..9b47c743 100644 --- a/src/RMGManager.cc +++ b/src/RMGManager.cc @@ -328,7 +328,7 @@ void RMGManager::SetRandEngineSeed(int seed) { ); CLHEP::HepRandom::setTheSeed(0); } else CLHEP::HepRandom::setTheSeed(seed); - RMGLog::Out(RMGLog::summary, "CLHEP::HepRandom seed set to: ", seed); + RMGLog::Out(RMGLog::summary, "CLHEP::HepRandom seed changed to: ", seed, " (user value)"); fIsRandControlled = true; } @@ -341,7 +341,12 @@ void RMGManager::SetRandEngineInternalSeed(int index) { int array_index = index % 2; CLHEP::HepRandom::setTheSeed(seeds[array_index]); - RMGLog::Out(RMGLog::summary, "CLHEP::HepRandom seed set to: ", seeds[array_index]); + RMGLog::Out( + RMGLog::summary, + "CLHEP::HepRandom seed changed to: ", + seeds[array_index], + " (from the internal seed table)" + ); fIsRandControlled = true; } @@ -351,7 +356,7 @@ void RMGManager::SetRandSystemEntropySeed() { std::random_device rd; // uses RDRND or /dev/urandom auto rand_seed = dist(rd); CLHEP::HepRandom::setTheSeed(rand_seed); - RMGLog::Out(RMGLog::summary, "CLHEP::HepRandom seed set to: ", rand_seed); + RMGLog::Out(RMGLog::summary, "CLHEP::HepRandom seed changed to: ", rand_seed, " (from system entropy)"); } void RMGManager::DefineCommands() { diff --git a/src/RMGRunAction.cc b/src/RMGRunAction.cc index 7ffed27e..62a17bb1 100644 --- a/src/RMGRunAction.cc +++ b/src/RMGRunAction.cc @@ -400,7 +400,7 @@ void RMGRunAction::PostprocessOutputFile() const { try { fs::rename(worker_tmp, worker_lh5); - RMGLog::Out(RMGLog::summary, "Moved output file ", worker_tmp.string(), " to ", worker_lh5.string()); + RMGLog::Out(RMGLog::detail, "Moved output file ", worker_tmp.string(), " to ", worker_lh5.string()); } catch (const fs::filesystem_error& e) { RMGLog::Out( RMGLog::error, diff --git a/tests/basics/CMakeLists.txt b/tests/basics/CMakeLists.txt index 05dc0602..8d123de8 100644 --- a/tests/basics/CMakeLists.txt +++ b/tests/basics/CMakeLists.txt @@ -29,4 +29,4 @@ add_test(NAME basics/rand-seed COMMAND ${REMAGE_PYEXE} -g gdml/geometry.gdml -o none --rand-seed 123 --macro-substitutions ENERGY=1000 GENERATOR=GPS -- macros/run.mac) set_tests_properties(basics/rand-seed PROPERTIES PASS_REGULAR_EXPRESSION - "CLHEP::HepRandom seed set to: 123") + "CLHEP::HepRandom seed changed to: 123") diff --git a/tests/confinement/test_basic_surface.py b/tests/confinement/test_basic_surface.py index 4b2114bc..01c96c4a 100644 --- a/tests/confinement/test_basic_surface.py +++ b/tests/confinement/test_basic_surface.py @@ -35,7 +35,7 @@ def add_local_pos(vertices, pos): return vertices -tol = 1e-6 +tol = 1e-6 # mm select_sides = { "tubby": { "func": [ @@ -209,7 +209,10 @@ def add_local_pos(vertices, pos): indices[is_close] = idx if len(indices[indices == -1]) > 0: - msg = f"{dtype} has primaries not close to any side" + msg = ( + f"{dtype} has {len(indices[indices == -1])} in {len(vertices)} " + f"primaries not close to any side with absolute tolerance {tol} mm" + ) raise ValueError(msg) vertices["idx"] = indices