logging.h revision 30ab3fc173709a491c9e2e103f53fb7c0d1b96b7
130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni/*
230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Copyright (C) 2011 The Android Open Source Project
330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Licensed under the Apache License, Version 2.0 (the "License");
530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * you may not use this file except in compliance with the License.
630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * You may obtain a copy of the License at
730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *      http://www.apache.org/licenses/LICENSE-2.0
930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
1030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Unless required by applicable law or agreed to in writing, software
1130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * distributed under the License is distributed on an "AS IS" BASIS,
1230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * See the License for the specific language governing permissions and
1430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * limitations under the License.
1530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni */
1630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
1730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#ifndef BASE_LOGGING_H_
1830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define BASE_LOGGING_H_
1930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
2030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#include <assert.h>
2130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
2230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#include <android/log.h>
2330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
2430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOG_TAG "MCA"
2530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOG_EVERY_FRAME false
2630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
2730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronienum LogFormat {
2830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni  LogFormat_Long,
2930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni  LogFormat_Short
3030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni};
3130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
3230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni// LOGE and LOGI are shortcuts to writing out to the Android info and error
3330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni// logs. Example usage: LOGE("Critical Error: %d is zero.", x);
3430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
3530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
3630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
3730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
3830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
3930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define  LOG_FRAME(...) if (LOG_EVERY_FRAME) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
4030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
4130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni// ASSERT provides a short-cut to the Android log assert (on the error log).
4230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni// Example usage: ASSERT(1 != 0, "This is bad.");
4330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#ifndef ASSERT
4430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define ASSERT(CONDITION) assert(CONDITION)
4530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#endif
4630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
4730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#ifndef LOG_ASSERT
4830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#define LOG_ASSERT(CONDITION, ...) \
4930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni  if (!CONDITION) {\
5030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    __android_log_assert( #CONDITION,\
5130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni                          LOG_TAG,\
5230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni                          __VA_ARGS__); \
5330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    assert(false); \
5430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni  }
5530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#endif
5630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
5730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#endif // BASE_LOGGING_H_
58