#ifndef DPL_LOG_H
#define DPL_LOG_H
+#ifndef LOG_TAG
+#warning Please define LOG_TAG
+#define LOG_TAG "WRT_UNDEFINED"
+#endif
+
+#include <dlog.h>
+#include <sstream>
+#include <dpl/availability.h>
#include <dpl/singleton.h>
#include <dpl/noncopyable.h>
-#include <dpl/log/abstract_log_provider.h>
-#include <dpl/log/dlog_log_provider.h>
-#include <dpl/log/old_style_log_provider.h>
-#include <sstream>
-#include <list>
+#include <dpl/free_deleter.h>
namespace DPL {
namespace Log {
/**
* DPL log system
*
- * To switch logs into old style, export
- * DPL_USE_OLD_STYLE_LOGS before application start
+ * @deprecated
*/
+const char *LocateSourceFileName(const char *filename);
+std::string FormatMessage(const char *message,
+ const char *filename,
+ int line,
+ const char *function);
+
class LogSystem :
private Noncopyable
{
private:
- typedef std::list<AbstractLogProvider *> AbstractLogProviderPtrList;
- AbstractLogProviderPtrList m_providers;
-
- DLOGLogProvider *m_dlogProvider;
- OldStyleLogProvider *m_oldStyleProvider;
-
bool m_isLoggingEnabled;
+ std::unique_ptr<char[],free_deleter> m_tag;
public:
bool IsLoggingEnabled() const;
void Debug(const char *message,
const char *filename,
int line,
- const char *function);
+ const char *function,
+ const char *tag = NULL);
/**
* Log info message
void Info(const char *message,
const char *filename,
int line,
- const char *function);
+ const char *function,
+ const char *tag = NULL);
/**
* Log warning message
void Warning(const char *message,
const char *filename,
int line,
- const char *function);
+ const char *function,
+ const char *tag = NULL);
/**
* Log error message
void Error(const char *message,
const char *filename,
int line,
- const char *function);
+ const char *function,
+ const char *tag = NULL);
/**
* Log pedantic message
void Pedantic(const char *message,
const char *filename,
int line,
- const char *function);
+ const char *function,
+ const char *tag = NULL);
/**
* Set default's DLOG provider Tag
*/
void SetTag(const char *tag);
- /**
- * Add abstract provider to providers list
- *
- * @notice Ownership is transfered to LogSystem and deleted upon exit
- */
- void AddProvider(AbstractLogProvider *provider);
-
- /**
- * Remove abstract provider from providers list
- */
- void RemoveProvider(AbstractLogProvider *provider);
-};
-
-/*
- * Replacement low overhead null logging class
- */
-class NullStream
-{
- public:
- NullStream() {}
-
- template <typename T>
- NullStream& operator<<(const T&)
- {
- return *this;
- }
};
/**
}
} // namespace DPL
-//
-// Log support
-//
-//
+/**
+ * Logging API for C++
+ * This API print out messages to the main log buffer
+ */
#ifdef DPL_LOGS_ENABLED
- #define DPL_MACRO_FOR_LOGGING(message, function) \
- do \
- { \
- if (DPL::Log::LogSystemSingleton::Instance().IsLoggingEnabled()) \
- { \
+#define DPL_MACRO_FOR_LOGGING(message, function) \
+do { \
std::ostringstream platformLog; \
platformLog << message; \
DPL::Log::LogSystemSingleton::Instance().function( \
platformLog.str().c_str(), \
- __FILE__, __LINE__, __FUNCTION__); \
- } \
- } while (0)
+ __FILE__, __LINE__, __FUNCTION__, \
+ LOG_TAG); \
+} while (0)
#else
-/* avoid warnings about unused variables */
- #define DPL_MACRO_FOR_LOGGING(message, function) \
- do { \
- DPL::Log::NullStream ns; \
- ns << message; \
- } while (0)
+#define DPL_MACRO_FOR_LOGGING(message, function) do { } while (0)
#endif
#define LogDebug(message) DPL_MACRO_FOR_LOGGING(message, Debug)
#define LogError(message) DPL_MACRO_FOR_LOGGING(message, Error)
#define LogPedantic(message) DPL_MACRO_FOR_LOGGING(message, Pedantic)
+
+/**
+ * Logging API for C
+ * This API print out messages to the system log buffer
+ */
+#define INTERNAL_SECURE_LOG __extension__ SECURE_SLOG
+#ifdef DPL_LOGS_ENABLED
+#define WRT_LOG_(priority, ...) \
+do { \
+ INTERNAL_SECURE_LOG(priority, LOG_TAG, __VA_ARGS__); \
+} while(0)
+#else
+#define WRT_LOG_(priority, ...) do { } while (0)
+#endif
+
+#define WrtLogD(...) WRT_LOG_(LOG_DEBUG, __VA_ARGS__)
+#define WrtLogI(...) WRT_LOG_(LOG_INFO, __VA_ARGS__)
+#define WrtLogW(...) WRT_LOG_(LOG_WARN, __VA_ARGS__)
+#define WrtLogE(...) WRT_LOG_(LOG_ERROR, __VA_ARGS__)
+
+
+/**
+ * Logging API for C
+ * This API print out messages to the system log buffer
+ */
+#ifndef SECURE_SLOGD
+#define SECURE_SLOGD(fmt, arg...) SLOGD(fmt,##arg)
+#endif
+
+#ifndef SECURE_SLOGW
+#define SECURE_SLOGW(fmt, arg...) SLOGW(fmt,##arg)
+#endif
+
+#ifndef SECURE_SLOGE
+#define SECURE_SLOGE(fmt, arg...) SLOGE(fmt,##arg)
+#endif
+
+#undef _D
+#undef _W
+#undef _E
+
+#ifdef DPL_LOGS_ENABLED
+#define _D(fmt, arg ...) SECURE_SLOGD(fmt, ##arg)
+#define _W(fmt, arg ...) SECURE_SLOGW(fmt, ##arg)
+#define _E(fmt, arg ...) SECURE_SLOGE(fmt, ##arg)
+#else
+#define _D(fmt, arg ...) do { } while (0)
+#define _W(fmt, arg ...) do { } while (0)
+#define _E(fmt, arg ...) do { } while (0)
+#endif
+
#endif // DPL_LOG_H