From 42b25a4d3e2fe66f03cbd8c866d8af7bd4f6e5a7 Mon Sep 17 00:00:00 2001 From: mannol Date: Sun, 27 Apr 2014 19:21:26 +0200 Subject: Yeah many calls --- toxcore/logger.h | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 toxcore/logger.h (limited to 'toxcore/logger.h') diff --git a/toxcore/logger.h b/toxcore/logger.h new file mode 100644 index 00000000..6c65850e --- /dev/null +++ b/toxcore/logger.h @@ -0,0 +1,86 @@ +/* logger.h + * + * Wrapping logger functions in nice macros + * + * Copyright (C) 2013 Tox project All Rights Reserved. + * + * This file is part of Tox. + * + * Tox is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tox is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tox. If not, see . + * + */ + + +#ifndef __TOXLOGGER +#define __TOXLOGGER + +// #define LOGGING + +#ifdef LOGGING +#include + +typedef enum _LoggerLevel +{ + INFO, + DEBUG, + WARNING, + ERROR +} LoggerLevel; + +/* + * Set 'level' as the lowest printable level + */ +int logger_init(const char* file_name, LoggerLevel level); +const char* logger_stringify_level(LoggerLevel level); +unsigned logger_get_pid(); +void logger_write (LoggerLevel level, const char* format, ...); +char* logger_timestr (char* dest); + +#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32) +#define _SFILE (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#else +#define _SFILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#endif + +#define WRITE_FORMAT(__LEVEL__, format) char* the_str = calloc(sizeof(char), strlen(format)+ 500); sprintf(the_str, "[%u] [%s] [%s] [%s:%d %s()] %s\n", \ + logger_get_pid(), logger_stringify_level(__LEVEL__), logger_timestr(__time__), _SFILE, __LINE__, __func__, format) + +/* Use these macros */ + +#define LOGGER_INIT(name, level) logger_init(name, level); +#define LOGGER_INFO(format, ...) do { char __time__[20]; WRITE_FORMAT(INFO, format); logger_write( INFO, the_str, ##__VA_ARGS__ ); free(the_str); } while (0) +#define LOGGER_DEBUG(format, ...) do { char __time__[20]; WRITE_FORMAT(DEBUG, format); logger_write( DEBUG, the_str, ##__VA_ARGS__ ); free(the_str); } while (0) +#define LOGGER_WARNING(format, ...) do { char __time__[20]; WRITE_FORMAT(WARNING, format); logger_write( WARNING, the_str, ##__VA_ARGS__ ); free(the_str); } while (0) +#define LOGGER_ERROR(format, ...) do { char __time__[20]; WRITE_FORMAT(ERROR, format); logger_write( ERROR, the_str, ##__VA_ARGS__ ); free(the_str); } while (0) + +/* To do some checks or similar only when logging use this */ +#define LOGGER_SCOPE(__SCOPE_DO__) do { __SCOPE_DO__ } while(0) + +#else + + +#define LOGGER_INIT(name, level) +#define LOGGER_INFO(format, ...) +#define LOGGER_DEBUG(format, ...) +#define LOGGER_WARNING(format, ...) +#define LOGGER_ERROR(format, ...) + +#define LOGGER_SCOPE(__SCOPE_DO__) + +#endif /* LOGGING */ + + + + +#endif /* __TOXLOGGER */ \ No newline at end of file -- cgit v1.2.3