Helpful logging and error format

Dependents:   Waldo_Embed_V2

Inspired by this blog post.

Work in Progress

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?

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