commit
279f2cb948
|
@ -42,7 +42,7 @@ static rt_device_t _traceout_device = RT_NULL;
|
||||||
|
|
||||||
/* define a default lg session. The name is empty. */
|
/* define a default lg session. The name is empty. */
|
||||||
static struct log_trace_session _def_session = {{"\0"}, LOG_TRACE_LEVEL_INFO};
|
static struct log_trace_session _def_session = {{"\0"}, LOG_TRACE_LEVEL_INFO};
|
||||||
static struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
|
static const struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
|
||||||
/* there is a default session at least */
|
/* there is a default session at least */
|
||||||
static rt_uint16_t _the_sess_nr = 1;
|
static rt_uint16_t _the_sess_nr = 1;
|
||||||
|
|
||||||
|
@ -83,11 +83,11 @@ rt_inline int _idname_len(log_trace_idnum_t id)
|
||||||
*/
|
*/
|
||||||
static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
|
static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
|
||||||
{
|
{
|
||||||
static struct log_trace_session *_cache = &_def_session;
|
static const struct log_trace_session *_cache = &_def_session;
|
||||||
rt_uint16_t first, last;
|
rt_uint16_t first, last;
|
||||||
|
|
||||||
if (_cache->id.num == num)
|
if (_cache->id.num == num)
|
||||||
return _cache;
|
return (struct log_trace_session *)_cache;
|
||||||
|
|
||||||
first = 0;
|
first = 0;
|
||||||
last = _the_sess_nr;
|
last = _the_sess_nr;
|
||||||
|
@ -104,7 +104,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
|
||||||
* process and we wrote the old one to _cache. But it doesn't harm
|
* process and we wrote the old one to _cache. But it doesn't harm
|
||||||
* a lot because it will be flushed in the next time. */
|
* a lot because it will be flushed in the next time. */
|
||||||
_cache = _the_sessions[i];
|
_cache = _the_sessions[i];
|
||||||
return _the_sessions[i];
|
return (struct log_trace_session *)_the_sessions[i];
|
||||||
}
|
}
|
||||||
else if (_the_sessions[i]->id.num > num)
|
else if (_the_sessions[i]->id.num > num)
|
||||||
{
|
{
|
||||||
|
@ -119,7 +119,7 @@ static struct log_trace_session* _lg_lookup_session(log_trace_idnum_t num)
|
||||||
return RT_NULL;
|
return RT_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t log_trace_register_session(struct log_trace_session *session)
|
rt_err_t log_trace_register_session(const struct log_trace_session *session)
|
||||||
{
|
{
|
||||||
unsigned int lvl, i;
|
unsigned int lvl, i;
|
||||||
|
|
||||||
|
@ -255,8 +255,9 @@ static rt_size_t _lg_parse_session(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _lg_fmtout(
|
void __logtrace_vfmtout(const struct log_trace_session *session,
|
||||||
struct log_trace_session *session, const char *fmt, va_list argptr)
|
const char *fmt,
|
||||||
|
va_list argptr)
|
||||||
{
|
{
|
||||||
/* 1 for ']' */
|
/* 1 for ']' */
|
||||||
static char _trace_buf[1+LOG_TRACE_BUFSZ];
|
static char _trace_buf[1+LOG_TRACE_BUFSZ];
|
||||||
|
@ -303,12 +304,12 @@ void log_trace(const char *fmt, ...)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
_lg_fmtout(session, fmt, args);
|
__logtrace_vfmtout(session, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
FINSH_FUNCTION_EXPORT(log_trace, log trace);
|
FINSH_FUNCTION_EXPORT(log_trace, log trace);
|
||||||
|
|
||||||
void log_session(struct log_trace_session *session, const char *fmt, ...)
|
void log_session(const struct log_trace_session *session, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
int level;
|
int level;
|
||||||
|
@ -321,7 +322,7 @@ void log_session(struct log_trace_session *session, const char *fmt, ...)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
_lg_fmtout(session, fmt, args);
|
__logtrace_vfmtout(session, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* File : log_trace.h
|
* File : log_trace.h
|
||||||
* This file is part of RT-Thread RTOS
|
* This file is part of RT-Thread RTOS
|
||||||
* COPYRIGHT (C) 2013, RT-Thread Development Team
|
* COPYRIGHT (C) 2013-2014, RT-Thread Development Team
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -95,7 +95,7 @@ void log_trace_init(void);
|
||||||
*
|
*
|
||||||
* @return RT_EOK on success. -RT_EFULL if there is no space for registration.
|
* @return RT_EOK on success. -RT_EFULL if there is no space for registration.
|
||||||
*/
|
*/
|
||||||
rt_err_t log_trace_register_session(struct log_trace_session *session);
|
rt_err_t log_trace_register_session(const struct log_trace_session *session);
|
||||||
|
|
||||||
/** find a session with name
|
/** find a session with name
|
||||||
*
|
*
|
||||||
|
@ -130,7 +130,43 @@ void log_trace(const char *fmt, ...);
|
||||||
* "[systick][name]log messages". The name is the name of the session. It is
|
* "[systick][name]log messages". The name is the name of the session. It is
|
||||||
* faster than bare log_trace.
|
* faster than bare log_trace.
|
||||||
*/
|
*/
|
||||||
void log_session(struct log_trace_session *session, const char *fmt, ...);
|
void log_session(const struct log_trace_session *session, const char *fmt, ...);
|
||||||
|
|
||||||
|
extern void __logtrace_vfmtout(const struct log_trace_session *session,
|
||||||
|
const char *fmt,
|
||||||
|
va_list argptr);
|
||||||
|
|
||||||
|
rt_inline void __logtrace_fmtout(const struct log_trace_session *session,
|
||||||
|
const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
__logtrace_vfmtout(session, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* log with numeric level
|
||||||
|
*
|
||||||
|
* The prototype of this function is:
|
||||||
|
*
|
||||||
|
* void log_session_lvl(struct log_trace_session *session,
|
||||||
|
* int lvl,
|
||||||
|
* const char *fmt, ...);
|
||||||
|
*
|
||||||
|
* If the @session is const and @level is greater than @session->lvl, the whole
|
||||||
|
* function will be optimized out. This is suitable for performance critical
|
||||||
|
* places where in most cases, the log is turned off by level.
|
||||||
|
*/
|
||||||
|
#define log_session_lvl(session, level, fmt, ...) \
|
||||||
|
do { \
|
||||||
|
if ((level) > (session)->lvl) \
|
||||||
|
{ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
__logtrace_fmtout(session, fmt, ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/* here comes the global part. All sessions share the some output backend. */
|
/* here comes the global part. All sessions share the some output backend. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue