Как включить класс звонков и номер строки в журнал, используя Pantheios? - PullRequest
4 голосов
/ 26 февраля 2010

Я только начал использовать Pantheios , и это действительно похоже на отличную библиотеку для регистрации! Может быть, даже самый лучший для C ++! Поздравляем автора!

Однако я не смог найти ни в документации, ни во всех сообщениях на форуме ничего о том, как включить вызывающий класс и номер строки в журнал.

Я использую be.file в качестве серверной части, и я определил пользовательский интерфейс, глядя на пример fe.simple . Это как-то связано с PANTHEIOS_EXTERN_C const char PANTHEIOS_FE_PROCESS_IDENTITY[] или я нахожусь на совершенно неверном пути?

Ответы [ 2 ]

5 голосов
/ 28 февраля 2010

Ответ для этого на самом деле находится в файле FAQ, включенном в библиотеку загрузки. У меня есть библиотека DLL с фиксированным внутренним интерфейсом, в которой есть следующий заголовок, и я могу включить класс, функцию и номер строки в файл журнала.

#include <pantheios/pantheios.hpp>
#include <pantheios/frontends/fe.N.h>
//#include <pantheios/frontends/fe.simple.h>
#ifndef PANTHEIOS_INCL_PANTHEIOS_H_TRACE
#define PANTHEIOS_TRACE_PREFIX         __FILE__ "(" PANTHEIOS_STRINGIZE(__LINE__) "): " __FUNCTION__ ": "
#endif /* PANTHEIOS_INCL_PANTHEIOS_H_TRACE */
#include <pantheios/trace.h>
#include <pantheios/inserters.hpp>
#include <pantheios/backends/bec.file.h>    // be.file header

То, что здесь происходит, заключается в том, что вы должны переопределить PANTHEIOS_TRACE_PREFIX, прежде чем включать trace.h, что я и показал выше. Остальные строки кода включены просто, чтобы показать вам, куда идет #define. И извините за задержку ответа. Если вы хотите, я мог бы опубликовать загрузку в своем блоге с помощью DLL-проекта с фиксированным фоном, который любой мог бы использовать в своем решении для простой регистрации на основе файлов. Оставьте комментарий, если у вас есть интерес к этому проекту

Обновление 28.02.2010 00:53 CST: Для справки вот вопрос из FAQ:

Q9: «Предоставляет ли Pantheios конфигурацию, которая выдает зарегистрированное сообщение?» содержащий содержащую функцию, эквивалентную:

   log(informational, __FUNCTION__, ": my message");

без необходимости писать это (или какую-нибудь оболочку, которая проверяет поддержку компилятора). "[15 марта 2008]

A9: Вам нужно #define PANTHEIOS_TRACE_PREFIX к тому, что вы хотите. По умолчанию это __FILE__ "(" PANTHEIOS_STRINGIZE(__LINE__) "): ", что дает формат <file>(<line>):

Чтобы включить функцию, давайте скажем, что вы хотите, чтобы она имела формат <file>(<line>): <func>:. Для этого вы должны определить это следующим образом:

#include <pantheios/pantheios.h>
#define PANTHEIOS_TRACE_PREFIX         __FILE__ " " PANTHEIOS_STRINGIZE(__LINE__) ": " __FUNCTION__ ": "
#include <pantheios/trace.h>

Обратите внимание, что определение должно прийти до включения pantheios / trace.h. Следовательно, более безопасный способ сделать это заключается в следующем:

/* File: myPantheiosRootHeader.h */
#include <pantheios/pantheios.h>

#ifdef PANTHEIOS_INCL_PANTHEIOS_H_TRACE
# error pantheios/trace.h must not be included before myPantheiosRootHeader.h
#endif /* PANTHEIOS_INCL_PANTHEIOS_H_TRACE */

#define PANTHEIOS_TRACE_PREFIX         __FILE__ " " PANTHEIOS_STRINGIZE(__LINE__) ": " __FUNCTION__ ": "
#include <pantheios/trace.h>
0 голосов
/ 26 февраля 2010

Я не нашел способа автоматически включить эту информацию - вы, конечно, можете добавить номер строки в само сообщение журнала, если используете макрос __LINE__. Не уверен, насколько это портативно.

...