[DEV] update log interface

This commit is contained in:
Edouard DUPIN 2014-01-05 23:03:11 +01:00
parent b5883ad936
commit 8d7bd46da4
4 changed files with 56 additions and 24 deletions

View File

@ -59,13 +59,13 @@ etk::CStart etk::cstart;
# include <android/log.h>
#endif
etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
{
switch (_obj)
{
etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj) {
switch (_obj) {
case logLevelCritical:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_BOLD_RED;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_BOLD_RED;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_FATAL;
@ -75,7 +75,9 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
break;
case logLevelError:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_RED;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_RED;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_ERROR;
@ -85,7 +87,9 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
break;
case logLevelWarning:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_MAGENTA;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_MAGENTA;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_WARN;
@ -95,7 +99,9 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
break;
case logLevelInfo:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_CYAN;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_CYAN;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_INFO;
@ -105,7 +111,9 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
break;
case logLevelDebug:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_YELLOW;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_YELLOW;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_DEBUG;
@ -115,7 +123,9 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
break;
case logLevelVerbose:
#if !defined(__TARGET_OS__Windows)
_os << ETK_BASH_COLOR_WHITE;
if (_os.m_enableColor == true) {
_os << ETK_BASH_COLOR_WHITE;
}
#endif
#if defined(__TARGET_OS__Android)
_os.m_levelAndroid = ANDROID_LOG_VERBOSE;
@ -133,9 +143,21 @@ etk::CCout& etk::operator <<(etk::CCout &_os, const enum etk::logLevel _obj)
}
void etk::CCout::setColor(bool _enable) {
m_enableColor = _enable;
}
etk::CCout::CCout()
{
void etk::CCout::setOutputFile(bool _enable) {
if (m_outputFile != NULL) {
fclose(m_outputFile);
m_outputFile = NULL;
}
m_outputFile = fopen("~/dev/perso/out/MacOs/debug/staging/clang/output.log", "w");
}
etk::CCout::CCout() :
m_enableColor(true),
m_outputFile(NULL) {
#if defined(__TARGET_OS__Android)
m_levelAndroid = 0;
#endif
@ -287,7 +309,9 @@ etk::CCout& etk::CCout::operator << (CStart _ccc)
etk::CCout& etk::CCout::operator << (etk::CEndl _t)
{
#if !defined(__TARGET_OS__Windows)
strncat(m_tmpChar, ETK_BASH_COLOR_NORMAL, MAX_LOG_SIZE);
if (m_enableColor == true) {
strncat(m_tmpChar, ETK_BASH_COLOR_NORMAL, MAX_LOG_SIZE);
}
#endif
strncat(m_tmpChar, "\n", MAX_LOG_SIZE);
m_tmpChar[MAX_LOG_SIZE] = '\0';
@ -296,6 +320,9 @@ etk::CCout& etk::CCout::operator << (etk::CEndl _t)
#else
printf("%s", m_tmpChar);
#endif
if (m_outputFile != NULL) {
fprintf(m_outputFile, "%s", m_tmpChar);
}
memset(m_tmpChar, 0, (MAX_LOG_SIZE+1)*sizeof(char));
m_mutex.unLock();
return *this;

View File

@ -23,7 +23,10 @@ namespace etk {
* @brief Generic log output system. it change automaticly from generic console to Android console.
*/
class CCout {
public:
bool m_enableColor;
private:
FILE* m_outputFile;
char m_tmpChar[MAX_LOG_SIZE+1];
char tmp[MAX_LOG_SIZE_TMP];
etk::Mutex m_mutex;
@ -54,6 +57,8 @@ namespace etk {
CCout& operator << (bool _t);
CCout& operator << (CStart _ccc);
CCout& operator << (etk::CEndl _t);
void setColor(bool _enable);
void setOutputFile(bool _enable);
};
extern etk::CCout cout;
extern etk::CEndl endl;

View File

@ -417,7 +417,7 @@ std::string std::to_string(bool _val) {
}
return "false";
}
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
std::string std::to_string(int _val) {
char tmpVal[256];
sprintf(tmpVal, "%d", _val);
@ -796,7 +796,7 @@ std::vector<std::u32string> std::split(const std::u32string& _input, char32_t _v
return list;
}
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
double std::stod(const std::string& _str, size_t* _idx) {
double ret = 0;
sscanf(_str.c_str(), "%Lf", &ret);

View File

@ -65,7 +65,7 @@ namespace std {
std::string to_string(const std::u32string& _obj);
//! @previous
std::string to_string(bool _val);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
//! @previous
std::string to_string(int _val);
//! @previous
@ -121,49 +121,49 @@ namespace std {
}
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
double stod(const std::string& _str, size_t* _idx = 0);
#endif
//! @previous
double stod(const std::u32string& _str, size_t* _idx = 0);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
float stof(const std::string& _str, size_t* _idx = 0);
#endif
//! @previous
float stof(const std::u32string& _str, size_t* _idx = 0);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
int stoi(const std::string& _str, size_t* _idx = 0, int _base = 10);
#endif
//! @previous
int stoi(const std::u32string& _str, size_t* _idx = 0, int _base = 10);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
long stol(const std::string& _str, size_t* _idx = 0, int _base = 10);
#endif
//! @previous
long stol(const std::u32string& _str, size_t* _idx = 0, int _base = 10);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
long double stold(const std::string& _str, size_t* _idx = 0);
#endif
//! @previous
long double stold(const std::u32string& _str, size_t* _idx = 0);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
long long stoll(const std::string& _str, size_t* _idx = 0, int _base = 10);
#endif
//! @previous
long long stoll(const std::u32string& _str, size_t* _idx = 0, int _base = 10);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
unsigned long stoul(const std::string& _str, size_t* _idx = 0, int _base = 10);
#endif
//! @previous
unsigned long stoul(const std::u32string& _str, size_t* _idx = 0, int _base = 10);
#if (defined(__TARGET_OS__Android) || defined(__TARGET_OS__MacOs))
#if (defined(__TARGET_OS__Android))
unsigned long long stoull(const std::string& _str, size_t* _idx = 0, int _base = 10);
#endif
//! @previous