Annotation of gpl/axl/src/axl_log.c, revision 1.1

1.1     ! misho       1: /*
        !             2:  *  LibAxl:  Another XML library 
        !             3:  *  Copyright (C) 2006 Advanced Software Production Line, S.L.
        !             4:  *
        !             5:  *  This program is free software; you can redistribute it and/or
        !             6:  *  modify it under the terms of the GNU Lesser General Public License
        !             7:  *  as published by the Free Software Foundation; either version 2.1 of
        !             8:  *  the License, or (at your option) any later version.
        !             9:  *
        !            10:  *  This program is distributed in the hope that it will be useful,
        !            11:  *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
        !            12:  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
        !            13:  *  GNU Lesser General Public License for more details.
        !            14:  *
        !            15:  *  You should have received a copy of the GNU Lesser General Public
        !            16:  *  License along with this program; if not, write to the Free
        !            17:  *  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
        !            18:  *  02111-1307 USA
        !            19:  *  
        !            20:  *  You may find a copy of the license under this software is released
        !            21:  *  at COPYING file. This is LGPL software: you are welcome to
        !            22:  *  develop proprietary applications using this library without any
        !            23:  *  royalty or fee but returning back any change, improvement or
        !            24:  *  addition in the form of source code, project image, documentation
        !            25:  *  patches, etc. 
        !            26:  *
        !            27:  *  For commercial support on build XML enabled solutions contact us:
        !            28:  *          
        !            29:  *      Postal address:
        !            30:  *         Advanced Software Production Line, S.L.
        !            31:  *         Edificio Alius A, Oficina 102,
        !            32:  *         C/ Antonio Suarez Nº 10,
        !            33:  *         Alcalá de Henares 28802 Madrid
        !            34:  *         Spain
        !            35:  *
        !            36:  *      Email address:
        !            37:  *         info@aspl.es - http://www.aspl.es/xml
        !            38:  */
        !            39: #include <axl_log.h>
        !            40: 
        !            41: /**
        !            42:  * \defgroup axl_log_module Axl Log: Console log reporting for AXL library
        !            43:  */
        !            44: 
        !            45: /** 
        !            46:  * \addtogroup axl_log_module
        !            47:  * @{
        !            48:  */
        !            49: 
        !            50: /* console log */
        !            51: axl_bool     not_executed  = axl_true;
        !            52: axl_bool     debug_enabled = axl_false;
        !            53: 
        !            54: /* colored log */
        !            55: axl_bool     not_executed_color  = axl_true;
        !            56: axl_bool     debug_color_enabled = axl_false;
        !            57: 
        !            58: /** 
        !            59:  * @brief Allows to check if the log reporting inside the system is
        !            60:  * enabled.
        !            61:  *
        !            62:  * @return axl_true if the log is enabled or axl_false
        !            63:  */
        !            64: axl_bool      axl_log_is_enabled (void) 
        !            65: {
        !            66: #if defined(AXL_OS_WIN32) && ! defined(__GNUC__)
        !            67:        int requiredSize;
        !            68: #endif
        !            69: 
        !            70:        if (not_executed) {
        !            71: #if defined(AXL_OS_WIN32) && ! defined(__GNUC__)
        !            72:                getenv_s( &requiredSize, NULL, 0, "AXL_DEBUG");
        !            73:                debug_enabled = (requiredSize > 0);
        !            74: #else
        !            75:                debug_enabled = (getenv ("AXL_DEBUG") != NULL);
        !            76: #endif
        !            77:                not_executed  = axl_false;
        !            78:        }
        !            79: 
        !            80:        /* return current value */
        !            81:        return debug_enabled;
        !            82: }
        !            83: 
        !            84: /** 
        !            85:  *
        !            86:  * @brief Allows to get current log configuration, to use colors.
        !            87:  * 
        !            88:  * @return axl_true if the color log is enabled or axl_false
        !            89:  */
        !            90: axl_bool    axl_log_color_is_enabled (void)
        !            91: {
        !            92: #if defined(AXL_OS_WIN32) && ! defined(__GNUC__)
        !            93:        int requiredSize;
        !            94: #endif
        !            95: 
        !            96:        if (not_executed_color) {
        !            97: #if defined(AXL_OS_WIN32) && ! defined(__GNUC__)
        !            98:                getenv_s( &requiredSize, NULL, 0, "AXL_DEBUG_COLOR");
        !            99:                debug_color_enabled = (requiredSize > 0);
        !           100: #else
        !           101:                debug_color_enabled = (getenv ("AXL_DEBUG_COLOR") != NULL);
        !           102: #endif
        !           103:                not_executed_color  = axl_false;
        !           104:        }
        !           105: 
        !           106:        /* return current value */
        !           107:        return debug_color_enabled;
        !           108: }
        !           109: 
        !           110: /** 
        !           111:  * @brief Allows to control how to activate the log reporting to the
        !           112:  * console from the axl core library.
        !           113:  * 
        !           114:  * @param value axl_true to enable log to console, otherwise axl_false is
        !           115:  * returned.
        !           116:  */
        !           117: void     axl_log_enable (axl_bool value)
        !           118: {
        !           119:        /* activate debuging according to the variable */
        !           120:        not_executed  = axl_false;
        !           121:        debug_enabled = value;
        !           122:        return;
        !           123: }
        !           124: 
        !           125: /** 
        !           126:  * @brief Allows to control how to activate the colog log reporting to
        !           127:  * the console from the axl core library.
        !           128:  * 
        !           129:  * @param value axl_true to enable log to console, otherwise axl_false is
        !           130:  * returned.
        !           131:  */
        !           132: void     axl_log_color_enable (axl_bool value)
        !           133: {
        !           134:        /* activate color debuging according to the variable */
        !           135:        not_executed_color  = axl_false;
        !           136:        debug_color_enabled = value;
        !           137:        return;
        !           138: }
        !           139: 
        !           140: /** 
        !           141:  * @brief Allows to drop a log to the console.
        !           142:  *
        !           143:  * This function allow to drop a log to the console using the given
        !           144:  * domain, as an identification of which subsystem have reported the
        !           145:  * information, and report level. This report level is used to notify
        !           146:  * the consideration of the log reported.
        !           147:  * 
        !           148:  * The function allows to provide a printf like interface to report
        !           149:  * messages. Here are some examples:
        !           150:  * 
        !           151:  * \code
        !           152:  * // drop a log about current library initialization
        !           153:  * axl_log ("axl", AXL_LEVEL_DEBUG, "library properly initialized status=%d", status);
        !           154:  * \endcode
        !           155:  *
        !           156:  *
        !           157:  * @param domain The domain where the log as generated. if NULL is
        !           158:  * provided a log with no domain will be generated.
        !           159:  *
        !           160:  * @param level The level that this message is classificed. 
        !           161:  * 
        !           162:  * @param message The message to report. The message to report must be
        !           163:  * not NULL.
        !           164:  */
        !           165: void axl_log (char * domain, AxlDebugLevel level, char * message, ...)
        !           166: {
        !           167: 
        !           168: #ifdef SHOW_DEBUG_LOG
        !           169:        va_list    args;
        !           170: 
        !           171:        /* check if the log is enabled */
        !           172:        if (! axl_log_is_enabled ())
        !           173:                return;
        !           174: 
        !           175:        /* printout the process pid */
        !           176:        if (axl_log_color_is_enabled ()) 
        !           177:                printf ("\e[1;36m(proc %d)\e[0m: ", getpid ());
        !           178:        else
        !           179:                printf ("(proc %d): ", getpid ());
        !           180: 
        !           181:        /* drop a log according to the level */
        !           182:        if (axl_log_color_is_enabled ()) {
        !           183:                switch (level) {
        !           184:                case AXL_LEVEL_DEBUG:
        !           185:                        printf ("(\e[1;32mdebug\e[0m) ");
        !           186:                        break;
        !           187:                case AXL_LEVEL_WARNING:
        !           188:                        printf ("(\e[1;33mwarning\e[0m) ");
        !           189:                        break;
        !           190:                case AXL_LEVEL_CRITICAL:
        !           191:                        printf ("(\e[1;31mcritical\e[0m) ");
        !           192:                        break;
        !           193:                }
        !           194:        }else {
        !           195:                switch (level) {
        !           196:                case AXL_LEVEL_DEBUG:
        !           197:                        printf ("(debug)");
        !           198:                        break;
        !           199:                case AXL_LEVEL_WARNING:
        !           200:                        printf ("(warning)");
        !           201:                        break;
        !           202:                case AXL_LEVEL_CRITICAL:
        !           203:                        printf ("(critical) ");
        !           204:                        break;
        !           205:                }
        !           206:        }
        !           207: 
        !           208:        /* drop a log according to the domain */
        !           209:        (domain != NULL) ? printf ("%s: ", domain) : printf (": ");
        !           210: 
        !           211:        /* print the message */
        !           212:        va_start (args, message);
        !           213:        vprintf (message, args);
        !           214:        va_end (args);
        !           215: 
        !           216:        printf ("\n");
        !           217: 
        !           218:        /* ensure that the log is droped to the console */
        !           219:        fflush (stdout);
        !           220: #endif
        !           221: 
        !           222:        /* return */
        !           223:        return;
        !           224: }
        !           225: 
        !           226: /* @} */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>