Boost.Log: поддержка имени файла и номера строки
Я пытаюсь заставить свою команду уйти изlog4cxx
и попробуйте использоватьBoost.Log v2
вместо. Наш текущийшаблон log4cxx довольно просто:
log4cxx::helpers::Properties prop;
prop.setProperty("log4j.rootLogger","DEBUG, A1");
prop.setProperty("log4j.appender.A1","org.apache.log4j.ConsoleAppender");
prop.setProperty("log4j.appender.A1.layout","org.apache.log4j.PatternLayout");
prop.setProperty("log4j.appender.A1.layout.ConversionPattern","%d{ABSOLUTE} %-5p [%c] %m%n");
log4cxx::PropertyConfigurator::configure(prop);
Однако мне не удалось найти решение для поддержки печати имени файла и номера строки. Я нашел до сих порстарый пост, но нет четкого решения (нет принятого решения). Я смотрел на использование этихBOOST_LOG_NAMED_SCOPE
но они чувствуют себя очень некрасиво, поскольку невозможно напечатать правильный номер строки, когда несколько из них используются в одной и той же функции.
Я также нашел более простое прямое решение,Вот, Но это также кажется уродливым, поскольку он напечатает полный путь, а не просто базовое имя (оно не настраивается). Таким образом, полный путь и номер строки всегда печатаются в фиксированном месте (доexpr::smessage
).
Я также нашел этосообщение, который выглядит как старое решение.
И, наконец, самое многообещающее решение, которое я нашел, былоВот, Однако это даже не компилируется для меня.
Поэтому мой вопрос прост: как я могу использовать Boost.Log v2, чтобы напечатать имя файла (не полный путь) и номер строки с минимальнымгибкость форматирования (нет решения сMACRO
а также__FILE__
/ __LINE__
принято, пожалуйста). Буду признателен за решение, которое не включаетBOOST_LOG_NAMED_SCOPE
, как описаноВот:
Если вместо этого вы хотите увидеть номера строк определенных записей журнала, то лучший способ - определить пользовательский макрос, который вы будете использовать для записи журналов. В этом макросе вы можете добавить имя файла и номер строки в качестве атрибутов к записи (для этого вы можете использовать манипуляторы). Обратите внимание, что в этом случае вы не сможете использовать эти атрибуты в фильтрах, но вам, вероятно, это не нужно.