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 | } |