diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/logger.cpp | 44 | ||||
| -rw-r--r-- | src/logger.h | 5 | ||||
| -rw-r--r-- | src/tests/logger.cpp | 2 |
3 files changed, 51 insertions, 0 deletions
diff --git a/src/logger.cpp b/src/logger.cpp index 34b5d78..1e0313b 100644 --- a/src/logger.cpp +++ b/src/logger.cpp | |||
| @@ -129,3 +129,47 @@ void Bu::Logger::setLevel( int n ) | |||
| 129 | } | 129 | } |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | void Bu::Logger::hexDump( int nLevel, const char *sFile, const char *sFunction, | ||
| 133 | int nLine, const void *pDataV, long nDataLen, | ||
| 134 | const char *lpName ) | ||
| 135 | { | ||
| 136 | log( nLevel, sFile, sFunction, nLine, "Displaying %ld bytes of %s.\n", nDataLen, lpName ); | ||
| 137 | const unsigned char *pData = (const unsigned char *)pDataV; | ||
| 138 | int j = 0; | ||
| 139 | Bu::FString sBorder; | ||
| 140 | for( int l = 0; l < 8*3+2*8+2; l++ ) sBorder += ((l!=8*3)?("-"):("+")); | ||
| 141 | sBorder += '\n'; | ||
| 142 | log( nLevel, sFile, sFunction, nLine, sBorder.getStr() ); | ||
| 143 | Bu::FString sLine; | ||
| 144 | for(;;) | ||
| 145 | { | ||
| 146 | int kmax = 8; | ||
| 147 | if( nDataLen-j < 8 ) kmax = nDataLen-j; | ||
| 148 | for(int k = 0; k < 8; k++ ) | ||
| 149 | { | ||
| 150 | if( k < kmax ) | ||
| 151 | { | ||
| 152 | char buf[4]; | ||
| 153 | sprintf( buf, "%02X ", (int)((unsigned char)pData[j+k]) ); | ||
| 154 | sLine += buf; | ||
| 155 | } | ||
| 156 | else | ||
| 157 | { | ||
| 158 | sLine += "-- "; | ||
| 159 | } | ||
| 160 | } | ||
| 161 | sLine += "| "; | ||
| 162 | for(int k = 0; k < kmax; k++ ) | ||
| 163 | { | ||
| 164 | char buf[3]; | ||
| 165 | sprintf( buf, "%c ", (pData[j+k]>32 && pData[j+k]<=128)?(pData[j+k]):('.') ); | ||
| 166 | sLine += buf; | ||
| 167 | } | ||
| 168 | sLine += '\n'; | ||
| 169 | log( nLevel, sFile, sFunction, nLine, sLine.getStr() ); | ||
| 170 | sLine = ""; | ||
| 171 | j += kmax; | ||
| 172 | if( j >= nDataLen ) break; | ||
| 173 | } | ||
| 174 | log( nLevel, sFile, sFunction, nLine, sBorder.getStr() ); | ||
| 175 | } | ||
diff --git a/src/logger.h b/src/logger.h index f8e1692..f561e88 100644 --- a/src/logger.h +++ b/src/logger.h | |||
| @@ -75,6 +75,8 @@ namespace Bu | |||
| 75 | void setMask( int n ); | 75 | void setMask( int n ); |
| 76 | void setLevel( int n ); | 76 | void setLevel( int n ); |
| 77 | 77 | ||
| 78 | void hexDump( int nLevel, const char *sFile, const char *sFunction, int nLine, const void *pData, long nDataLen, const char *lpName ); | ||
| 79 | |||
| 78 | private: | 80 | private: |
| 79 | Bu::FString sLogFormat; | 81 | Bu::FString sLogFormat; |
| 80 | int nLevelMask; | 82 | int nLevelMask; |
| @@ -89,6 +91,9 @@ namespace Bu | |||
| 89 | #define lineLog( nLevel, sFrmt, ...) \ | 91 | #define lineLog( nLevel, sFrmt, ...) \ |
| 90 | Bu::Logger::getInstance().log( nLevel, __FILE__, __PRETTY_FUNCTION__, __LINE__, sFrmt, ##__VA_ARGS__ ) | 92 | Bu::Logger::getInstance().log( nLevel, __FILE__, __PRETTY_FUNCTION__, __LINE__, sFrmt, ##__VA_ARGS__ ) |
| 91 | 93 | ||
| 94 | #define logHexDump( nLevel, pData, iSize, sName ) \ | ||
| 95 | Bu::Logger::getInstance().hexDump( nLevel, __FILE__, __PRETTY_FUNCTION__, __LINE__, pData, iSize, sName ) | ||
| 96 | |||
| 92 | /** | 97 | /** |
| 93 | * Set the Bu::Logger logging mask directly. See Bu::Logger::setMask for | 98 | * Set the Bu::Logger logging mask directly. See Bu::Logger::setMask for |
| 94 | * details. | 99 | * details. |
diff --git a/src/tests/logger.cpp b/src/tests/logger.cpp index 290f479..59be9d4 100644 --- a/src/tests/logger.cpp +++ b/src/tests/logger.cpp | |||
| @@ -22,6 +22,8 @@ int main() | |||
| 22 | setLogFormat("%L: %y-%02m-%02d %h:%02M:%02s %f:%l:%F: %t"); | 22 | setLogFormat("%L: %y-%02m-%02d %h:%02M:%02s %f:%l:%F: %t"); |
| 23 | lineLog( 5, "Hey, error: %s", strerror( errno ) ); | 23 | lineLog( 5, "Hey, error: %s", strerror( errno ) ); |
| 24 | 24 | ||
| 25 | logHexDump( 5, "This is a test of the hex-dump facility", 16, "Random stuff"); | ||
| 26 | |||
| 25 | Thing gh; | 27 | Thing gh; |
| 26 | gh.go( 6); | 28 | gh.go( 6); |
| 27 | } | 29 | } |
