diff --git a/src/pattern_formatter.cpp b/src/pattern_formatter.cpp index 3abca528..b785752c 100644 --- a/src/pattern_formatter.cpp +++ b/src/pattern_formatter.cpp @@ -1240,9 +1240,24 @@ void pattern_formatter::handle_flag_(char flag, details::padding_info padding) default: // Unknown flag appears as is auto unknown_flag = std::make_unique(); - unknown_flag->add_ch('%'); - unknown_flag->add_ch(flag); - formatters_.push_back((std::move(unknown_flag))); + + if (!padding.truncate_) + { + unknown_flag->add_ch('%'); + unknown_flag->add_ch(flag); + formatters_.push_back((std::move(unknown_flag))); + } + // fix issue #1617 (prev char was '!' and should have been treated as funcname flag instead of truncating flag) + // spdlog::set_pattern("[%10!] %v") => "[ main] some message" + // spdlog::set_pattern("[%3!!] %v") => "[mai] some message" + else + { + padding.truncate_ = false; + formatters_.push_back(std::make_unique>(padding)); + unknown_flag->add_ch(flag); + formatters_.push_back((std::move(unknown_flag))); + } + break; } }