1 /* -*- c -*-
2 * File: log.c
3 * Author: Igor Vlasenko <vlasenko@imath.kiev.ua>
4 * Created: Thu Sep 1 17:18:16 2005
5 *
6 * $Id$
7 */
8
9 /* based on FFmpeg av_log API */
10
11 #include <stdio.h>
12 #include <string.h>
13 #include "tmpllog.h"
14
15 static int tmpl_log_level = TMPL_LOG_ERROR;
16 TMPLPRO_LOCAL FILE* tmpl_log_stream = NULL;
17
18 TMPLPRO_LOCAL void
tmpl_log_default_callback(int level,const char * fmt,va_list vl)19 tmpl_log_default_callback(int level, const char* fmt, va_list vl)
20 {
21 vfprintf(stderr, fmt, vl);
22 }
23
24 TMPLPRO_LOCAL void
tmpl_log_stream_callback(int level,const char * fmt,va_list vl)25 tmpl_log_stream_callback(int level, const char* fmt, va_list vl)
26 {
27 vfprintf(tmpl_log_stream, fmt, vl);
28 fflush(tmpl_log_stream);
29 }
30
31 static void (*tmpl_log_callback)(int, const char*, va_list) = tmpl_log_default_callback;
32
33 TMPLPRO_LOCAL
34 void
tmpl_log(int level,const char * fmt,...)35 tmpl_log(int level, const char *fmt, ...)
36 {
37 va_list vl;
38 va_start(vl, fmt);
39 tmpl_vlog(level, fmt, vl);
40 va_end(vl);
41 }
42
43 TMPLPRO_LOCAL
44 void
tmpl_vlog(int level,const char * fmt,va_list vl)45 tmpl_vlog(int level, const char *fmt, va_list vl)
46 {
47 if(level>tmpl_log_level) return;
48 tmpl_log_callback(level, fmt, vl);
49 }
50
51 TMPLPRO_LOCAL
52 int
tmpl_log_get_level(void)53 tmpl_log_get_level(void)
54 {
55 return tmpl_log_level;
56 }
57
58 TMPLPRO_LOCAL
59 void
tmpl_log_set_level(int level)60 tmpl_log_set_level(int level)
61 {
62 tmpl_log_level = level;
63 }
64
65 TMPLPRO_LOCAL
66 void
tmpl_log_set_callback(void (* callback)(int,const char *,va_list))67 tmpl_log_set_callback(void (*callback)(int, const char*, va_list))
68 {
69 tmpl_log_callback = callback;
70 }
71