SDL  2.0
SDL_log.h File Reference
#include "SDL_stdinc.h"
#include "begin_code.h"
#include "close_code.h"
+ Include dependency graph for SDL_log.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SDL_MAX_LOG_MESSAGE   4096
 The maximum size of a log message. More...
 

Typedefs

typedef void(* SDL_LogOutputFunction) (void *userdata, int category, SDL_LogPriority priority, const char *message)
 The prototype for the log output function. More...
 

Enumerations

enum  {
  SDL_LOG_CATEGORY_APPLICATION,
  SDL_LOG_CATEGORY_ERROR,
  SDL_LOG_CATEGORY_ASSERT,
  SDL_LOG_CATEGORY_SYSTEM,
  SDL_LOG_CATEGORY_AUDIO,
  SDL_LOG_CATEGORY_VIDEO,
  SDL_LOG_CATEGORY_RENDER,
  SDL_LOG_CATEGORY_INPUT,
  SDL_LOG_CATEGORY_TEST,
  SDL_LOG_CATEGORY_RESERVED1,
  SDL_LOG_CATEGORY_RESERVED2,
  SDL_LOG_CATEGORY_RESERVED3,
  SDL_LOG_CATEGORY_RESERVED4,
  SDL_LOG_CATEGORY_RESERVED5,
  SDL_LOG_CATEGORY_RESERVED6,
  SDL_LOG_CATEGORY_RESERVED7,
  SDL_LOG_CATEGORY_RESERVED8,
  SDL_LOG_CATEGORY_RESERVED9,
  SDL_LOG_CATEGORY_RESERVED10,
  SDL_LOG_CATEGORY_CUSTOM
}
 The predefined log categories. More...
 
enum  SDL_LogPriority {
  SDL_LOG_PRIORITY_VERBOSE = 1,
  SDL_LOG_PRIORITY_DEBUG,
  SDL_LOG_PRIORITY_INFO,
  SDL_LOG_PRIORITY_WARN,
  SDL_LOG_PRIORITY_ERROR,
  SDL_LOG_PRIORITY_CRITICAL,
  SDL_NUM_LOG_PRIORITIES
}
 The predefined log priorities. More...
 

Functions

void SDL_LogSetAllPriority (SDL_LogPriority priority)
 Set the priority of all log categories. More...
 
void SDL_LogSetPriority (int category, SDL_LogPriority priority)
 Set the priority of a particular log category. More...
 
SDL_LogPriority SDL_LogGetPriority (int category)
 Get the priority of a particular log category. More...
 
void SDL_LogResetPriorities (void)
 Reset all priorities to default. More...
 
void SDL_Log (SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(1)
 Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. More...
 
void SDL_LogVerbose (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_VERBOSE. More...
 
void SDL_LogDebug (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_DEBUG. More...
 
void SDL_LogInfo (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_INFO. More...
 
void SDL_LogWarn (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_WARN. More...
 
void SDL_LogError (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_ERROR. More...
 
void SDL_LogCritical (int category, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(2)
 Log a message with SDL_LOG_PRIORITY_CRITICAL. More...
 
void SDL_LogMessage (int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt,...) SDL_PRINTF_VARARG_FUNC(3)
 Log a message with the specified category and priority. More...
 
void SDL_LogMessageV (int category, SDL_LogPriority priority, const char *fmt, va_list ap)
 Log a message with the specified category and priority. More...
 
void SDL_LogGetOutputFunction (SDL_LogOutputFunction *callback, void **userdata)
 Get the current log output function. More...
 
void SDL_LogSetOutputFunction (SDL_LogOutputFunction callback, void *userdata)
 This function allows you to replace the default log output function with one of your own. More...
 

Detailed Description

Simple log messages with categories and priorities.

By default logs are quiet, but if you're debugging SDL you might want:

SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);

Here's where the messages go on different platforms: Windows: debug output stream Android: log output Others: standard error output (stderr)

Definition in file SDL_log.h.

Macro Definition Documentation

#define SDL_MAX_LOG_MESSAGE   4096

The maximum size of a log message.

Messages longer than the maximum size will be truncated

Definition at line 54 of file SDL_log.h.

Referenced by SDL_LogMessageV(), SDL_LogOutput(), and SDL_PromptAssertion().

Typedef Documentation

typedef void(* SDL_LogOutputFunction) (void *userdata, int category, SDL_LogPriority priority, const char *message)

The prototype for the log output function.

Definition at line 189 of file SDL_log.h.

Enumeration Type Documentation

anonymous enum

The predefined log categories.

By default the application category is enabled at the INFO level, the assert category is enabled at the WARN level, test is enabled at the VERBOSE level and all other categories are enabled at the CRITICAL level.

Enumerator
SDL_LOG_CATEGORY_APPLICATION 
SDL_LOG_CATEGORY_ERROR 
SDL_LOG_CATEGORY_ASSERT 
SDL_LOG_CATEGORY_SYSTEM 
SDL_LOG_CATEGORY_AUDIO 
SDL_LOG_CATEGORY_VIDEO 
SDL_LOG_CATEGORY_RENDER 
SDL_LOG_CATEGORY_INPUT 
SDL_LOG_CATEGORY_TEST 
SDL_LOG_CATEGORY_RESERVED1 
SDL_LOG_CATEGORY_RESERVED2 
SDL_LOG_CATEGORY_RESERVED3 
SDL_LOG_CATEGORY_RESERVED4 
SDL_LOG_CATEGORY_RESERVED5 
SDL_LOG_CATEGORY_RESERVED6 
SDL_LOG_CATEGORY_RESERVED7 
SDL_LOG_CATEGORY_RESERVED8 
SDL_LOG_CATEGORY_RESERVED9 
SDL_LOG_CATEGORY_RESERVED10 
SDL_LOG_CATEGORY_CUSTOM 

Definition at line 64 of file SDL_log.h.

65 {
75 
76  /* Reserved for future SDL library use */
87 
88  /* Beyond this point is reserved for application use, e.g.
89  enum {
90  MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM,
91  MYAPP_CATEGORY_AWESOME2,
92  MYAPP_CATEGORY_AWESOME3,
93  ...
94  };
95  */
97 };

The predefined log priorities.

Enumerator
SDL_LOG_PRIORITY_VERBOSE 
SDL_LOG_PRIORITY_DEBUG 
SDL_LOG_PRIORITY_INFO 
SDL_LOG_PRIORITY_WARN 
SDL_LOG_PRIORITY_ERROR 
SDL_LOG_PRIORITY_CRITICAL 
SDL_NUM_LOG_PRIORITIES 

Definition at line 102 of file SDL_log.h.

Function Documentation

void SDL_Log ( SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO.

Definition at line 173 of file SDL_log.c.

References SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, and SDL_LogMessageV().

174 {
175  va_list ap;
176 
177  va_start(ap, fmt);
179  va_end(ap);
180 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogCritical ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_CRITICAL.

Definition at line 233 of file SDL_log.c.

References SDL_LOG_PRIORITY_CRITICAL, and SDL_LogMessageV().

234 {
235  va_list ap;
236 
237  va_start(ap, fmt);
238  SDL_LogMessageV(category, SDL_LOG_PRIORITY_CRITICAL, fmt, ap);
239  va_end(ap);
240 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogDebug ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_DEBUG.

Definition at line 193 of file SDL_log.c.

References SDL_LOG_PRIORITY_DEBUG, and SDL_LogMessageV().

194 {
195  va_list ap;
196 
197  va_start(ap, fmt);
198  SDL_LogMessageV(category, SDL_LOG_PRIORITY_DEBUG, fmt, ap);
199  va_end(ap);
200 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogError ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_ERROR.

Definition at line 223 of file SDL_log.c.

References SDL_LOG_PRIORITY_ERROR, and SDL_LogMessageV().

224 {
225  va_list ap;
226 
227  va_start(ap, fmt);
228  SDL_LogMessageV(category, SDL_LOG_PRIORITY_ERROR, fmt, ap);
229  va_end(ap);
230 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogGetOutputFunction ( SDL_LogOutputFunction callback,
void **  userdata 
)

Get the current log output function.

Definition at line 423 of file SDL_log.c.

References SDL_log_function, and SDL_log_userdata.

424 {
425  if (callback) {
427  }
428  if (userdata) {
429  *userdata = SDL_log_userdata;
430  }
431 }
static SDL_LogOutputFunction SDL_log_function
Definition: SDL_log.c:62
static Uint32 callback(Uint32 interval, void *param)
Definition: testtimer.c:34
static void * SDL_log_userdata
Definition: SDL_log.c:63
SDL_LogPriority SDL_LogGetPriority ( int  category)

Get the priority of a particular log category.

Definition at line 134 of file SDL_log.c.

References SDL_LogLevel::category, SDL_LogLevel::next, SDL_LogLevel::priority, SDL_application_priority, SDL_assert_priority, SDL_default_priority, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_CATEGORY_ASSERT, SDL_LOG_CATEGORY_TEST, and SDL_test_priority.

Referenced by SDL_LogMessageV().

135 {
136  SDL_LogLevel *entry;
137 
138  for (entry = SDL_loglevels; entry; entry = entry->next) {
139  if (entry->category == category) {
140  return entry->priority;
141  }
142  }
143 
144  if (category == SDL_LOG_CATEGORY_TEST) {
145  return SDL_test_priority;
146  } else if (category == SDL_LOG_CATEGORY_APPLICATION) {
148  } else if (category == SDL_LOG_CATEGORY_ASSERT) {
149  return SDL_assert_priority;
150  } else {
151  return SDL_default_priority;
152  }
153 }
static SDL_LogPriority SDL_test_priority
Definition: SDL_log.c:61
static SDL_LogLevel * SDL_loglevels
Definition: SDL_log.c:57
SDL_LogPriority priority
Definition: SDL_log.c:48
static SDL_LogPriority SDL_assert_priority
Definition: SDL_log.c:59
static SDL_LogPriority SDL_default_priority
Definition: SDL_log.c:58
int category
Definition: SDL_log.c:47
struct SDL_LogLevel * next
Definition: SDL_log.c:49
static SDL_LogPriority SDL_application_priority
Definition: SDL_log.c:60
void SDL_LogInfo ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_INFO.

Definition at line 203 of file SDL_log.c.

References SDL_LOG_PRIORITY_INFO, and SDL_LogMessageV().

204 {
205  va_list ap;
206 
207  va_start(ap, fmt);
208  SDL_LogMessageV(category, SDL_LOG_PRIORITY_INFO, fmt, ap);
209  va_end(ap);
210 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogMessage ( int  category,
SDL_LogPriority  priority,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with the specified category and priority.

Definition at line 243 of file SDL_log.c.

References SDL_LogLevel::category, SDL_LOG_CATEGORY_CUSTOM, SDL_LOG_CATEGORY_RESERVED1, and SDL_LogMessageV().

244 {
245  va_list ap;
246 
247  va_start(ap, fmt);
248  SDL_LogMessageV(category, priority, fmt, ap);
249  va_end(ap);
250 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogMessageV ( int  category,
SDL_LogPriority  priority,
const char *  fmt,
va_list  ap 
)

Log a message with the specified category and priority.

Definition at line 267 of file SDL_log.c.

References NULL, SDL_log_function, SDL_log_userdata, SDL_LogGetPriority(), SDL_MAX_LOG_MESSAGE, SDL_NUM_LOG_PRIORITIES, SDL_stack_alloc, SDL_stack_free, SDL_strlen, and SDL_vsnprintf.

Referenced by SDL_Log(), SDL_LogCritical(), SDL_LogDebug(), SDL_LogError(), SDL_LogInfo(), SDL_LogMessage(), SDL_LogVerbose(), and SDL_LogWarn().

268 {
269  char *message;
270  size_t len;
271 
272  /* Nothing to do if we don't have an output function */
273  if (!SDL_log_function) {
274  return;
275  }
276 
277  /* Make sure we don't exceed array bounds */
278  if ((int)priority < 0 || priority >= SDL_NUM_LOG_PRIORITIES) {
279  return;
280  }
281 
282  /* See if we want to do anything with this message */
283  if (priority < SDL_LogGetPriority(category)) {
284  return;
285  }
286 
287  message = SDL_stack_alloc(char, SDL_MAX_LOG_MESSAGE);
288  if (!message) {
289  return;
290  }
291 
292  SDL_vsnprintf(message, SDL_MAX_LOG_MESSAGE, fmt, ap);
293 
294  /* Chop off final endline. */
295  len = SDL_strlen(message);
296  if ((len > 0) && (message[len-1] == '\n')) {
297  message[--len] = '\0';
298  if ((len > 0) && (message[len-1] == '\r')) { /* catch "\r\n", too. */
299  message[--len] = '\0';
300  }
301  }
302 
303  SDL_log_function(SDL_log_userdata, category, priority, message);
304  SDL_stack_free(message);
305 }
#define SDL_MAX_LOG_MESSAGE
The maximum size of a log message.
Definition: SDL_log.h:54
GLuint GLsizei const GLchar * message
GLenum GLsizei len
#define SDL_vsnprintf
static SDL_LogOutputFunction SDL_log_function
Definition: SDL_log.c:62
#define SDL_stack_alloc(type, count)
Definition: SDL_stdinc.h:324
SDL_LogPriority SDL_LogGetPriority(int category)
Get the priority of a particular log category.
Definition: SDL_log.c:134
static void * SDL_log_userdata
Definition: SDL_log.c:63
#define SDL_strlen
#define SDL_stack_free(data)
Definition: SDL_stdinc.h:325
void SDL_LogResetPriorities ( void  )

Reset all priorities to default.

Note
This is called in SDL_Quit().

Definition at line 156 of file SDL_log.c.

References DEFAULT_APPLICATION_PRIORITY, DEFAULT_ASSERT_PRIORITY, DEFAULT_PRIORITY, DEFAULT_TEST_PRIORITY, SDL_LogLevel::next, SDL_application_priority, SDL_assert_priority, SDL_default_priority, SDL_free(), SDL_loglevels, and SDL_test_priority.

157 {
158  SDL_LogLevel *entry;
159 
160  while (SDL_loglevels) {
161  entry = SDL_loglevels;
162  SDL_loglevels = entry->next;
163  SDL_free(entry);
164  }
165 
170 }
#define DEFAULT_APPLICATION_PRIORITY
Definition: SDL_log.c:42
static SDL_LogPriority SDL_test_priority
Definition: SDL_log.c:61
static SDL_LogLevel * SDL_loglevels
Definition: SDL_log.c:57
#define DEFAULT_ASSERT_PRIORITY
Definition: SDL_log.c:41
static SDL_LogPriority SDL_assert_priority
Definition: SDL_log.c:59
static SDL_LogPriority SDL_default_priority
Definition: SDL_log.c:58
void SDL_free(void *mem)
struct SDL_LogLevel * next
Definition: SDL_log.c:49
#define DEFAULT_PRIORITY
Definition: SDL_log.c:40
static SDL_LogPriority SDL_application_priority
Definition: SDL_log.c:60
#define DEFAULT_TEST_PRIORITY
Definition: SDL_log.c:43
void SDL_LogSetAllPriority ( SDL_LogPriority  priority)

Set the priority of all log categories.

Definition at line 99 of file SDL_log.c.

References SDL_LogLevel::next, SDL_LogLevel::priority, SDL_application_priority, SDL_assert_priority, and SDL_default_priority.

100 {
101  SDL_LogLevel *entry;
102 
103  for (entry = SDL_loglevels; entry; entry = entry->next) {
104  entry->priority = priority;
105  }
106  SDL_default_priority = priority;
107  SDL_assert_priority = priority;
108  SDL_application_priority = priority;
109 }
static SDL_LogLevel * SDL_loglevels
Definition: SDL_log.c:57
SDL_LogPriority priority
Definition: SDL_log.c:48
static SDL_LogPriority SDL_assert_priority
Definition: SDL_log.c:59
static SDL_LogPriority SDL_default_priority
Definition: SDL_log.c:58
struct SDL_LogLevel * next
Definition: SDL_log.c:49
static SDL_LogPriority SDL_application_priority
Definition: SDL_log.c:60
void SDL_LogSetOutputFunction ( SDL_LogOutputFunction  callback,
void userdata 
)

This function allows you to replace the default log output function with one of your own.

Definition at line 434 of file SDL_log.c.

References callback(), SDL_log_function, and SDL_log_userdata.

435 {
437  SDL_log_userdata = userdata;
438 }
static SDL_LogOutputFunction SDL_log_function
Definition: SDL_log.c:62
static Uint32 callback(Uint32 interval, void *param)
Definition: testtimer.c:34
static void * SDL_log_userdata
Definition: SDL_log.c:63
void SDL_LogSetPriority ( int  category,
SDL_LogPriority  priority 
)

Set the priority of a particular log category.

Definition at line 112 of file SDL_log.c.

References SDL_LogLevel::category, SDL_LogLevel::next, SDL_LogLevel::priority, SDL_loglevels, and SDL_malloc.

113 {
114  SDL_LogLevel *entry;
115 
116  for (entry = SDL_loglevels; entry; entry = entry->next) {
117  if (entry->category == category) {
118  entry->priority = priority;
119  return;
120  }
121  }
122 
123  /* Create a new entry */
124  entry = (SDL_LogLevel *)SDL_malloc(sizeof(*entry));
125  if (entry) {
126  entry->category = category;
127  entry->priority = priority;
128  entry->next = SDL_loglevels;
129  SDL_loglevels = entry;
130  }
131 }
static SDL_LogLevel * SDL_loglevels
Definition: SDL_log.c:57
SDL_LogPriority priority
Definition: SDL_log.c:48
int category
Definition: SDL_log.c:47
struct SDL_LogLevel * next
Definition: SDL_log.c:49
#define SDL_malloc
void SDL_LogVerbose ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_VERBOSE.

Definition at line 183 of file SDL_log.c.

References SDL_LOG_PRIORITY_VERBOSE, and SDL_LogMessageV().

184 {
185  va_list ap;
186 
187  va_start(ap, fmt);
188  SDL_LogMessageV(category, SDL_LOG_PRIORITY_VERBOSE, fmt, ap);
189  va_end(ap);
190 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267
void SDL_LogWarn ( int  category,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)

Log a message with SDL_LOG_PRIORITY_WARN.

Definition at line 213 of file SDL_log.c.

References SDL_LOG_PRIORITY_WARN, and SDL_LogMessageV().

214 {
215  va_list ap;
216 
217  va_start(ap, fmt);
218  SDL_LogMessageV(category, SDL_LOG_PRIORITY_WARN, fmt, ap);
219  va_end(ap);
220 }
void SDL_LogMessageV(int category, SDL_LogPriority priority, const char *fmt, va_list ap)
Log a message with the specified category and priority.
Definition: SDL_log.c:267