Helpful logging and error format
Inspired by this blog post.
Work in Progress
LogUtil.h@2:c54746c59ba4, 2013-04-05 (annotated)
- Committer:
- sam_grove
- Date:
- Fri Apr 05 23:16:03 2013 +0000
- Revision:
- 2:c54746c59ba4
- Parent:
- 1:491d2a7f4207
- Child:
- 4:cf2ada8ed11b
- Child:
- 5:1b4f4d4aec8c
Added some include headers for use case that doesn't include the mbed API
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sam_grove | 0:3054bbdace4c | 1 | /** |
sam_grove | 0:3054bbdace4c | 2 | * @file LogUtil.h |
sam_grove | 0:3054bbdace4c | 3 | * @brief Utility to log messages during runtime |
sam_grove | 0:3054bbdace4c | 4 | * @author sam grove |
sam_grove | 0:3054bbdace4c | 5 | * @version 1.0 |
sam_grove | 1:491d2a7f4207 | 6 | * @see http://www.drdobbs.com/cpp/a-lightweight-logger-for-c/240147505 |
sam_grove | 0:3054bbdace4c | 7 | * |
sam_grove | 0:3054bbdace4c | 8 | * Copyright (c) 2013 |
sam_grove | 0:3054bbdace4c | 9 | * |
sam_grove | 0:3054bbdace4c | 10 | * Licensed under the Apache License, Version 2.0 (the "License"); |
sam_grove | 0:3054bbdace4c | 11 | * you may not use this file except in compliance with the License. |
sam_grove | 0:3054bbdace4c | 12 | * You may obtain a copy of the License at |
sam_grove | 0:3054bbdace4c | 13 | * |
sam_grove | 0:3054bbdace4c | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
sam_grove | 0:3054bbdace4c | 15 | * |
sam_grove | 0:3054bbdace4c | 16 | * Unless required by applicable law or agreed to in writing, software |
sam_grove | 0:3054bbdace4c | 17 | * distributed under the License is distributed on an "AS IS" BASIS, |
sam_grove | 0:3054bbdace4c | 18 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
sam_grove | 0:3054bbdace4c | 19 | * See the License for the specific language governing permissions and |
sam_grove | 0:3054bbdace4c | 20 | * limitations under the License. |
sam_grove | 0:3054bbdace4c | 21 | */ |
sam_grove | 0:3054bbdace4c | 22 | |
sam_grove | 0:3054bbdace4c | 23 | #ifndef LOGUTIL_H |
sam_grove | 0:3054bbdace4c | 24 | #define LOGUTIL_H |
sam_grove | 0:3054bbdace4c | 25 | |
sam_grove | 2:c54746c59ba4 | 26 | #include <stdio.h> |
sam_grove | 2:c54746c59ba4 | 27 | #include <stdlib.h> |
sam_grove | 2:c54746c59ba4 | 28 | |
sam_grove | 0:3054bbdace4c | 29 | #define STREAM stdout |
sam_grove | 0:3054bbdace4c | 30 | #define LOG(...) \ |
sam_grove | 0:3054bbdace4c | 31 | fprintf(STREAM, "LOG: %s L#%d ", __PRETTY_FUNCTION__, __LINE__); \ |
sam_grove | 0:3054bbdace4c | 32 | fprintf(STREAM, ##__VA_ARGS__) |
sam_grove | 0:3054bbdace4c | 33 | #define WARN(...) \ |
sam_grove | 0:3054bbdace4c | 34 | fprintf(STREAM, "WARN: %s L#%d ", __PRETTY_FUNCTION__, __LINE__); \ |
sam_grove | 0:3054bbdace4c | 35 | fprintf(STREAM, ##__VA_ARGS__) |
sam_grove | 0:3054bbdace4c | 36 | #define ERROR(...) \ |
sam_grove | 0:3054bbdace4c | 37 | fprintf(STREAM, "ERROR: %s L#%d ", __PRETTY_FUNCTION__, __LINE__); \ |
sam_grove | 1:491d2a7f4207 | 38 | fprintf(STREAM, ##__VA_ARGS__); \ |
sam_grove | 1:491d2a7f4207 | 39 | fflush(STREAM); \ |
sam_grove | 1:491d2a7f4207 | 40 | exit(1) |
sam_grove | 0:3054bbdace4c | 41 | |
sam_grove | 0:3054bbdace4c | 42 | /** Using the LogUtil class |
sam_grove | 0:3054bbdace4c | 43 | * |
sam_grove | 0:3054bbdace4c | 44 | * Example: |
sam_grove | 0:3054bbdace4c | 45 | * @code |
sam_grove | 0:3054bbdace4c | 46 | * #include "mbed.h" |
sam_grove | 0:3054bbdace4c | 47 | * #include "LogUtil.h" |
sam_grove | 0:3054bbdace4c | 48 | * |
sam_grove | 1:491d2a7f4207 | 49 | * LogUtil logger; |
sam_grove | 0:3054bbdace4c | 50 | * |
sam_grove | 0:3054bbdace4c | 51 | * int main() |
sam_grove | 0:3054bbdace4c | 52 | * { |
sam_grove | 0:3054bbdace4c | 53 | * LOG("This is a log\n"); |
sam_grove | 0:3054bbdace4c | 54 | * WARN("This is a warning\n"); |
sam_grove | 0:3054bbdace4c | 55 | * |
sam_grove | 1:491d2a7f4207 | 56 | * for(int i=0; i<3; ++i) { |
sam_grove | 0:3054bbdace4c | 57 | * LOG("Log message #%d\n", i); |
sam_grove | 0:3054bbdace4c | 58 | * } |
sam_grove | 0:3054bbdace4c | 59 | * |
sam_grove | 1:491d2a7f4207 | 60 | * for(int i=0; i<3; ++i) { |
sam_grove | 0:3054bbdace4c | 61 | * WARN("Warn message #%d\n", i); |
sam_grove | 0:3054bbdace4c | 62 | * } |
sam_grove | 0:3054bbdace4c | 63 | * |
sam_grove | 1:491d2a7f4207 | 64 | * ERROR("This is an error\n"); |
sam_grove | 0:3054bbdace4c | 65 | * } |
sam_grove | 0:3054bbdace4c | 66 | * @endcode |
sam_grove | 0:3054bbdace4c | 67 | */ |
sam_grove | 0:3054bbdace4c | 68 | |
sam_grove | 0:3054bbdace4c | 69 | /** |
sam_grove | 0:3054bbdace4c | 70 | * @class LogUtil |
sam_grove | 0:3054bbdace4c | 71 | * @brief Different ways to log messages having a standard interface |
sam_grove | 0:3054bbdace4c | 72 | */ |
sam_grove | 0:3054bbdace4c | 73 | class LogUtil |
sam_grove | 0:3054bbdace4c | 74 | { |
sam_grove | 0:3054bbdace4c | 75 | public: |
sam_grove | 0:3054bbdace4c | 76 | |
sam_grove | 0:3054bbdace4c | 77 | /** Construct the LogUtil class and configure |
sam_grove | 0:3054bbdace4c | 78 | */ |
sam_grove | 0:3054bbdace4c | 79 | LogUtil(); |
sam_grove | 0:3054bbdace4c | 80 | |
sam_grove | 0:3054bbdace4c | 81 | }; |
sam_grove | 0:3054bbdace4c | 82 | |
sam_grove | 0:3054bbdace4c | 83 | |
sam_grove | 0:3054bbdace4c | 84 | #endif |
sam_grove | 0:3054bbdace4c | 85 | |
sam_grove | 0:3054bbdace4c | 86 |