/* Copyright 2012. Bloomberg Finance L.P. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: The above * copyright notice and this permission notice shall be included in all copies * or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ // blpapi_logging.h -*-C++-*- #ifndef INCLUDED_BLPAPI_LOGGING #define INCLUDED_BLPAPI_LOGGING //@PURPOSE: Provide a C call to register a call back for logging // //@DESCRIPTION: This component provides a C function that is used to // register a callback for logging // ///Usage ///----- // To use the call back a function needs to be created with the same definition // of blpapi_Logging_Func_t. // The callback will be called for all the log messages that have severity // greater than or equal to the specified 'thresholdSeverity'. // A callback can be registered multiple number of times but only the last // registered callback will be used. // Registering with a 'NULL' callback will de-register the callback. //.. // extern "C" { // void myLoggerCallback(blpapi_UInt64_t threadId, // int severity, // blpapi_Datetime_t timestamp, // const char *category, // const char *message) // { // if (severity == blpapi_Logging_SEVERITY_FATAL) { // // Do some logic for abort here // } // std::cout << severity << "-->" << message << std::endl; // } //.. // This callback needs to be registered with the library as //.. // int main() { // // .... // blpapi_Logging_registerCallback(myLoggerCallback, // blpapi_Logging_SEVERITY_TRACE); // // .... // } //.. #ifndef INCLUDED_BLPAPI_CALL #include <blpapi_call.h> #endif #ifndef INCLUDED_BLPAPI_DATETIME #include <blpapi_datetime.h> #endif #ifndef INCLUDED_BLPAPI_DEFS #include <blpapi_defs.h> #endif #ifdef __cplusplus extern "C" { #endif typedef void (*blpapi_Logging_Func_t)(blpapi_UInt64_t threadId, int severity, blpapi_Datetime_t timestamp, const char *category, const char *message); // Provide a type definition for the callback that will be called when a // message is logged. The specified 'threadId' is the id of the calling // thread. The specified 'severity' is the severity of the log message // whose value is defined by the type 'blpapi_Logging_Severity_t'. The // specified 'timestamp' is the date and time the message is logged. The // specified 'category' identifies the source of the logged message. The // specified 'message' is the actual log message text. BLPAPI_EXPORT int blpapi_Logging_registerCallback( blpapi_Logging_Func_t callback, blpapi_Logging_Severity_t thresholdSeverity); // Register the specified 'callback' that will be called for all log // messages with severity greater than or equal to the specified // 'thresholdSeverity'. The callback needs to be registered before the // start of all sessions. If this function is called multiple times, only // the last registered callback will take effect. // '0' is returned if callback is registered and a non-zero otherwise. BLPAPI_EXPORT void blpapi_Logging_logTestMessage(blpapi_Logging_Severity_t severity); // Log a test message at the specified 'severity'. Note that this // function is intended for testing of the logging configuration only. #ifdef __cplusplus } namespace BloombergLP { namespace blpapi { struct Logging { // This utility 'struct' provides a namespace for functions to test the // logging configuration. struct Severity { enum Type { // Enumeration used to specify different logging severity levels. e_off = blpapi_Logging_SEVERITY_OFF, e_fatal = blpapi_Logging_SEVERITY_FATAL, e_error = blpapi_Logging_SEVERITY_ERROR, e_warn = blpapi_Logging_SEVERITY_WARN, e_info = blpapi_Logging_SEVERITY_INFO, e_debug = blpapi_Logging_SEVERITY_DEBUG, e_trace = blpapi_Logging_SEVERITY_TRACE }; }; // CLASS METHODS static void logTestMessage(Severity::Type severity); // Log a test message with the specified 'severity'. Note that this // function is intended for testing of the logging configuration only. }; // ============================================================================ // INLINE FUNCTION DEFINITIONS // ============================================================================ // -------------- // struct Logging // -------------- // CLASS METHODS inline void Logging::logTestMessage(Severity::Type severity) { BLPAPI_CALL(blpapi_Logging_logTestMessage)( static_cast<blpapi_Logging_Severity_t>(severity)); } } // close namespace blpapi } // close namespace BloombergLP #endif #endif