/********************************************************************** * * PostGIS - Spatial Types for PostgreSQL * http://postgis.net * * PostGIS 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 2 of the License, or * (at your option) any later version. * * PostGIS 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 PostGIS. If not, see . * ********************************************************************** * * Copyright 2011 Sandro Santilli * Copyright 2008 Paul Ramsey * Copyright 2007-2008 Mark Cave-Ayland * Copyright 2001-2006 Refractions Research Inc. * **********************************************************************/ #ifndef LWGEOM_LOG_H #define LWGEOM_LOG_H 1 #include /* * Debug macros */ #if POSTGIS_DEBUG_LEVEL > 0 /* Display a notice at the given debug level */ #define LWDEBUG(level, msg) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ lwdebug(level, "[%s:%s:%d] " msg, __FILE__, __func__, __LINE__); \ } while (0); /* Display a formatted notice at the given debug level * (like printf, with variadic arguments) */ #define LWDEBUGF(level, msg, ...) \ do { \ if (POSTGIS_DEBUG_LEVEL >= level) \ lwdebug(level, "[%s:%s:%d] " msg, \ __FILE__, __func__, __LINE__, __VA_ARGS__); \ } while (0); /* Display a notice and a WKT representation of a geometry * at the given debug level */ #define LWDEBUGG(level, geom, msg) \ if (POSTGIS_DEBUG_LEVEL >= level) \ do { \ size_t sz; \ char *wkt = lwgeom_to_wkt(geom, WKT_EXTENDED, 15, &sz); \ /* char *wkt = lwgeom_to_hexwkb(geom, WKT_EXTENDED, &sz); */ \ LWDEBUGF(level, msg ": %s", wkt); \ lwfree(wkt); \ } while (0); /* Display a formatted notice and a WKT representation of a geometry * at the given debug level */ #define LWDEBUGGF(level, geom, fmt, ...) \ if (POSTGIS_DEBUG_LEVEL >= level) \ do { \ size_t sz; \ char *wkt = lwgeom_to_wkt(geom, WKT_EXTENDED, 15, &sz); \ /* char *wkt = lwgeom_to_hexwkb(geom, WKT_EXTENDED, &sz); */ \ LWDEBUGF(level, fmt ": %s", __VA_ARGS__, wkt); \ lwfree(wkt); \ } while (0); #else /* POSTGIS_DEBUG_LEVEL <= 0 */ /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUG(level, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUGF(level, msg, ...) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUGG(level, geom, msg) \ ((void) 0) /* Empty prototype that can be optimised away by the compiler * for non-debug builds */ #define LWDEBUGGF(level, geom, fmt, ...) \ ((void) 0) #endif /* POSTGIS_DEBUG_LEVEL <= 0 */ /** * Write a notice out to the notice handler. * * Uses standard printf() substitutions. * Use for messages you always want output. * For debugging, use LWDEBUG() or LWDEBUGF(). * @ingroup logging */ void lwnotice(const char *fmt, ...); /** * Write a notice out to the error handler. * * Uses standard printf() substitutions. * Use for errors you always want output. * For debugging, use LWDEBUG() or LWDEBUGF(). * @ingroup logging */ void lwerror(const char *fmt, ...); /** * Write a debug message out. * Don't call this function directly, use the * macros, LWDEBUG() or LWDEBUGF(), for * efficiency. * @ingroup logging */ void lwdebug(int level, const char *fmt, ...); #endif /* LWGEOM_LOG_H */