Helpful logging and error format

Dependents:   Waldo_Embed_V2

Inspired by this blog post.

Work in Progress

Committer:
sam_grove
Date:
Wed May 01 03:51:03 2013 +0000
Revision:
6:163b9d47fa87
Parent:
5:1b4f4d4aec8c
Parent:
4:cf2ada8ed11b
Child:
7:ef45bd2cd9bb
Merged LogUtil

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