4 This file is part of polypaudio.
6 polypaudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as
8 published by the Free Software Foundation; either version 2 of the
9 License, or (at your option) any later version.
11 polypaudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with polypaudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
34 #include <polypcore/xmalloc.h>
35 #include <polypcore/util.h>
39 #define ENV_LOGLEVEL "POLYP_LOG"
41 static char *log_ident
= NULL
;
42 static pa_log_target_t log_target
= PA_LOG_STDERR
;
43 static void (*user_log_func
)(pa_log_level_t l
, const char *s
) = NULL
;
44 static pa_log_level_t maximal_level
= PA_LOG_NOTICE
;
47 static const int level_to_syslog
[] = {
48 [PA_LOG_ERROR
] = LOG_ERR
,
49 [PA_LOG_WARN
] = LOG_WARNING
,
50 [PA_LOG_NOTICE
] = LOG_NOTICE
,
51 [PA_LOG_INFO
] = LOG_INFO
,
52 [PA_LOG_DEBUG
] = LOG_DEBUG
56 void pa_log_set_ident(const char *p
) {
60 log_ident
= pa_xstrdup(p
);
63 void pa_log_set_maximal_level(pa_log_level_t l
) {
64 assert(l
< PA_LOG_LEVEL_MAX
);
68 void pa_log_set_target(pa_log_target_t t
, void (*func
)(pa_log_level_t l
, const char*s
)) {
69 assert(t
== PA_LOG_USER
|| !func
);
74 void pa_log_levelv(pa_log_level_t level
, const char *format
, va_list ap
) {
76 assert(level
< PA_LOG_LEVEL_MAX
);
78 if ((e
= getenv(ENV_LOGLEVEL
)))
79 maximal_level
= atoi(e
);
81 if (level
> maximal_level
)
86 vfprintf(stderr
, format
, ap
);
91 openlog(log_ident
? log_ident
: "???", LOG_PID
, LOG_USER
);
92 vsyslog(level_to_syslog
[level
], format
, ap
);
98 char *t
= pa_vsprintf_malloc(format
, ap
);
99 assert(user_log_func
);
100 user_log_func(level
, t
);
111 void pa_log_level(pa_log_level_t level
, const char *format
, ...) {
113 va_start(ap
, format
);
114 pa_log_levelv(level
, format
, ap
);
118 void pa_log_debug(const char *format
, ...) {
120 va_start(ap
, format
);
121 pa_log_levelv(PA_LOG_DEBUG
, format
, ap
);
125 void pa_log_info(const char *format
, ...) {
127 va_start(ap
, format
);
128 pa_log_levelv(PA_LOG_INFO
, format
, ap
);
132 void pa_log_notice(const char *format
, ...) {
134 va_start(ap
, format
);
135 pa_log_levelv(PA_LOG_INFO
, format
, ap
);
139 void pa_log_warn(const char *format
, ...) {
141 va_start(ap
, format
);
142 pa_log_levelv(PA_LOG_WARN
, format
, ap
);
146 void pa_log_error(const char *format
, ...) {
148 va_start(ap
, format
);
149 pa_log_levelv(PA_LOG_ERROR
, format
, ap
);