Annotation of gpl/axl/src/axl_log.c, revision 1.1.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>