Helpful logging and error format

Dependents:   Waldo_Embed_V2

Inspired by this blog post.

Work in Progress

Committer:
sam_grove
Date:
Fri Apr 26 06:28:00 2013 +0000
Revision:
5:1b4f4d4aec8c
Parent:
2:c54746c59ba4
Child:
6:163b9d47fa87
fflush() all streams when used. pointer to the same stream (maybe repetitive calls too) mix up the output;

Who changed what in which revision?

UserRevisionLine numberNew 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 5:1b4f4d4aec8c 32 fprintf(STREAM, ##__VA_ARGS__); \
sam_grove 5:1b4f4d4aec8c 33 fflush(STREAM)
sam_grove 0:3054bbdace4c 34 #define WARN(...) \
sam_grove 0:3054bbdace4c 35 fprintf(STREAM, "WARN: %s L#%d ", __PRETTY_FUNCTION__, __LINE__); \
sam_grove 5:1b4f4d4aec8c 36 fprintf(STREAM, ##__VA_ARGS__); \
sam_grove 5:1b4f4d4aec8c 37 fflush(STREAM)
sam_grove 0:3054bbdace4c 38 #define ERROR(...) \
sam_grove 0:3054bbdace4c 39 fprintf(STREAM, "ERROR: %s L#%d ", __PRETTY_FUNCTION__, __LINE__); \
sam_grove 1:491d2a7f4207 40 fprintf(STREAM, ##__VA_ARGS__); \
sam_grove 1:491d2a7f4207 41 fflush(STREAM); \
sam_grove 1:491d2a7f4207 42 exit(1)
sam_grove 0:3054bbdace4c 43
sam_grove 0:3054bbdace4c 44 /** Using the LogUtil class
sam_grove 0:3054bbdace4c 45 *
sam_grove 0:3054bbdace4c 46 * Example:
sam_grove 0:3054bbdace4c 47 * @code
sam_grove 0:3054bbdace4c 48 * #include "mbed.h"
sam_grove 0:3054bbdace4c 49 * #include "LogUtil.h"
sam_grove 0:3054bbdace4c 50 *
sam_grove 1:491d2a7f4207 51 * LogUtil logger;
sam_grove 0:3054bbdace4c 52 *
sam_grove 0:3054bbdace4c 53 * int main()
sam_grove 0:3054bbdace4c 54 * {
sam_grove 0:3054bbdace4c 55 * LOG("This is a log\n");
sam_grove 0:3054bbdace4c 56 * WARN("This is a warning\n");
sam_grove 0:3054bbdace4c 57 *
sam_grove 1:491d2a7f4207 58 * for(int i=0; i<3; ++i) {
sam_grove 0:3054bbdace4c 59 * LOG("Log message #%d\n", i);
sam_grove 0:3054bbdace4c 60 * }
sam_grove 0:3054bbdace4c 61 *
sam_grove 1:491d2a7f4207 62 * for(int i=0; i<3; ++i) {
sam_grove 0:3054bbdace4c 63 * WARN("Warn message #%d\n", i);
sam_grove 0:3054bbdace4c 64 * }
sam_grove 0:3054bbdace4c 65 *
sam_grove 1:491d2a7f4207 66 * ERROR("This is an error\n");
sam_grove 0:3054bbdace4c 67 * }
sam_grove 0:3054bbdace4c 68 * @endcode
sam_grove 0:3054bbdace4c 69 */
sam_grove 0:3054bbdace4c 70
sam_grove 0:3054bbdace4c 71 /**
sam_grove 0:3054bbdace4c 72 * @class LogUtil
sam_grove 0:3054bbdace4c 73 * @brief Different ways to log messages having a standard interface
sam_grove 0:3054bbdace4c 74 */
sam_grove 0:3054bbdace4c 75 class LogUtil
sam_grove 0:3054bbdace4c 76 {
sam_grove 0:3054bbdace4c 77 public:
sam_grove 0:3054bbdace4c 78
sam_grove 0:3054bbdace4c 79 /** Construct the LogUtil class and configure
sam_grove 0:3054bbdace4c 80 */
sam_grove 0:3054bbdace4c 81 LogUtil();
sam_grove 0:3054bbdace4c 82
sam_grove 0:3054bbdace4c 83 };
sam_grove 0:3054bbdace4c 84
sam_grove 0:3054bbdace4c 85
sam_grove 0:3054bbdace4c 86 #endif
sam_grove 0:3054bbdace4c 87
sam_grove 0:3054bbdace4c 88