log4cplus でラッパー ライブラリを作成しました。私のライブラリにはLogMessage
、ログメッセージを保存するために log4cplus ライブラリ関数を呼び出している関数があります。
例えば。アプリケーション.cpp
int main()
{
LogMessage(DEBUG_LEVEL, __FILE__, __LINE__, "This is main function");
return 0;
}
mylibrary.cpp
HRESULT
LogMessage(
__in DWORD dwLogLevel,
__in LPSTR lpszFileName,
__in DWORD dwLineNumber,
__in LPSTR lpszLogMessage
)
{
//
// Instantiating a console appender
//
SharedAppenderPtr _ConsoleAppender(new ConsoleAppender());
_ConsoleAppender->setName(LOG4CPLUS_TEXT("AppenderName"));
//
// Creating a pattern to display log events
//
log4cplus::tstring pattern = LOG4CPLUS_TEXT("%L %F %r %d{%m/%d/%y %H:%M:%S} %-5p %c - %m%n");
//
// Instantiating a layout object with PatternLayout
//
_Layout = std::auto_ptr<Layout>(new log4cplus::PatternLayout(pattern));
//
// Attaching the layout object to the appender object
//
_ConsoleAppender->setLayout(_Layout);
//
// Getting root logger and adding the Console Appender with root
// logger
//
Logger::getRoot().addAppender(_ConsoleAppender);
Logger::getRoot().setAdditivity(FALSE);
//
// Instantiating a logger
//
Logger _Logger = Logger::getInstance(LOG4CPLUS_TEXT("_Logger"));
_Logger.addAppender(_ConsoleAppender);
_Logger.setAdditivity(FALSE);
//
// Printing the log messages on the console
//
switch( dwLogLevel )
{
case DEBUG_LEVEL:
{
_Logger.log(DEBUG_LOG_LEVEL, lpszLogMessage, lpszFileName, dwLineNumber);
break;
} // DEBUG_LEVEL
case INFO_LEVEL:
{
_Logger.log(INFO_LOG_LEVEL, lpszLogMessage, lpszFileName, dwLineNumber);
break;
} // INFO_LEVEL
case WARN_LEVEL:
{
_Logger.log(WARN_LOG_LEVEL, lpszLogMessage, lpszFileName, dwLineNumber);
break;
} // WARN_LEVEL
case ERROR_LEVEL:
{
_Logger.log(ERROR_LOG_LEVEL, lpszLogMessage, lpszFileName, dwLineNumber);
break;
} // ERROR_LEVEL
case FATAL_LEVEL:
{
_Logger.log(FATAL_LOG_LEVEL, lpszLogMessage, lpszFileName, dwLineNumber);
break;
} //
default:
{
HRESULT_FROM_WIN32(ERROR_INVALID_DATA);
break;
} // default
} // switch
return hResult;
}
私のアプリケーションから、関数名も渡したいと思います。
例えば。アプリケーション.cpp
int main()
{
LogMessage(DEBUG_LEVEL, __FILE__, __LINE__, __FUNCTION__, "This is main function");
return 0;
}
このログ メッセージをコンソール画面に出力するにはどうすればよいですか? 以下の関数は、ファイルと行番号のみを引数として取ります。また、関数名も出力したいと思います。
void log(LogLevel ll, const log4cplus::tstring& message,
const char* file=NULL, int line=-1) const;
更新: 申し訳ありませんが、PrintLogMessage で LogMessage 関数を #define したことを忘れていました
#define PrintLogMessage(dwLogLevel, lpszLogMessage) \
LogMessage(dwLogLevel, _FILE, __LINE__, lpszLogMessage)
だから私が使用しているアプリケーションでは、この行だけを書く必要があります
アプリケーション.cpp
int main()
{
PrintLogMessage(DEBUG_LEVEL, "This is main function");
return 0;
}
そして、私は同様の種類を書きたい
#define PrintLogMessage(dwLogLevel, lpszLogMessage) \
LogMessage(dwLogLevel, _FILE, __LINE__, __FUNCTION__, lpszLogMessage)
機能性のために__FUNCTION__
。ユーザーが毎回FILE、LINE、FUNCTIONを書きたくない。