independently, i like the idea of removing urj_log_level_t from
urj_parse_{file,stream}.
as for the rest, i dont think this addresses the last few infos i
posted. i dont understand why any caller to urj_log ever needs to
prefix "Error:" or "Warning:" to its strings. it already knows if
something is an error or warning based on the log level passed into
it.
this is what i mean:
--- global/log-error.c (revision 1948)
+++ global/log-error.c (working copy)
@@ -70,9 +70,15 @@ urj_do_log (urj_log_level_t level, const
va_start (ap, fmt);
if (level < URJ_LOG_LEVEL_WARNING)
- r = urj_log_state.out_vprintf (fmt, ap);
+ {
+ r = urj_log_state.out_vprintf ("%s: ", urj_log_level_string (level));
+ r += urj_log_state.out_vprintf (fmt, ap);
+ }
else
- r = urj_log_state.err_vprintf (fmt, ap);
+ {
+ r = urj_log_state.err_vprintf ("%s: ", urj_log_level_string (level));
+ r += urj_log_state.err_vprintf (fmt, ap);
+ }
va_end (ap);
return r;
and then to address your point about the output being too messy with
the file/func/line, we do:
--- include/urjtag/log.h (revision 1948)
+++ include/urjtag/log.h (working copy)
@@ -40,7 +40,8 @@ urj_log_state_t;
extern urj_log_state_t urj_log_state;
-int urj_do_log (urj_log_level_t level, const char *fmt, ...)
+int urj_do_log (urj_log_level_t level, const char *file, size_t line,
+ const char *func, const char *fmt, ...)
#ifdef __GNUC__
__attribute__ ((format (printf, 2, 3)))
#endif
@@ -49,7 +50,7 @@ int urj_do_log (urj_log_level_t level, c
#define urj_log(lvl, ...) \
do { \
if ((lvl) >= urj_log_state.level) \
- urj_do_log (lvl, __VA_ARGS__); \
+ urj_do_log (lvl, __FILE__, __LINE__, __func__, __VA_ARGS__); \
} while (0)
/**
@@ -59,12 +60,7 @@ int urj_do_log (urj_log_level_t level, c
* @param ... consists of a printf argument set. It needs to start with a
* const char *fmt, followed by arguments used by fmt.
*/
-#define urj_warning(...) \
- do { \
- urj_log (URJ_LOG_LEVEL_WARNING, "%s:%d %s() Warning: ", \
- __FILE__, __LINE__, __func__); \
- urj_log (URJ_LOG_LEVEL_WARNING, __VA_ARGS__); \
- } while (0)
+#define urj_warning(...) urj_log (URJ_LOG_LEVEL_WARNING, __VA_ARGS__)
/**
* Convert the named level into the corresponding urj_log_level_t.
--- src/global/log-error.c (revision 1948)
+++ src/global/log-error.c (working copy)
@@ -60,7 +60,8 @@ stdout_vprintf(const char *fmt, va_list
}
int
-urj_do_log (urj_log_level_t level, const char *fmt, ...)
+urj_do_log (urj_log_level_t level, const char *file, size_t line,
+ const char *func, const char *fmt, ...)
{
va_list ap;
int r;
@@ -69,10 +70,19 @@ urj_do_log (urj_log_level_t level, const
return 0;
va_start (ap, fmt);
+ r = 0;
if (level < URJ_LOG_LEVEL_WARNING)
- r = urj_log_state.out_vprintf (fmt, ap);
+ {
+ if (urj_log_state.level < URJ_LOG_LEVEL_DETAIL)
+ r = urj_log_state.out_vprintf (fmt, "%s:%i %s(): ", file,
line, func);
+ r += urj_log_state.out_vprintf (fmt, ap);
+ }
else
- r = urj_log_state.err_vprintf (fmt, ap);
+ {
+ if (urj_log_state.level < URJ_LOG_LEVEL_DETAIL)
+ r = urj_log_state.out_vprintf (fmt, "%s:%i %s(): ", file,
line, func);
+ r += urj_log_state.err_vprintf (fmt, ap);
+ }
va_end (ap);
return r;
-mike
------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security
threats, fraudulent activity, and more. Splunk takes this data and makes
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
UrJTAG-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/urjtag-development