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
35 #define ENV_LOGLEVEL "POLYP_LOG"
37 static char *log_ident
= NULL
;
38 static enum pa_log_target log_target
= PA_LOG_STDERR
;
39 static void (*user_log_func
)(enum pa_log_level l
, const char *s
) = NULL
;
40 static enum pa_log_level maximal_level
= PA_LOG_NOTICE
;
42 static const int level_to_syslog
[] = {
43 [PA_LOG_ERROR
] = LOG_ERR
,
44 [PA_LOG_WARN
] = LOG_WARNING
,
45 [PA_LOG_NOTICE
] = LOG_NOTICE
,
46 [PA_LOG_INFO
] = LOG_INFO
,
47 [PA_LOG_DEBUG
] = LOG_DEBUG
50 void pa_log_set_ident(const char *p
) {
54 log_ident
= pa_xstrdup(p
);
57 void pa_log_set_maximal_level(enum pa_log_level l
) {
58 assert(l
< PA_LOG_LEVEL_MAX
);
62 void pa_log_set_target(enum pa_log_target t
, void (*func
)(enum pa_log_level l
, const char*s
)) {
63 assert(t
== PA_LOG_USER
|| !func
);
68 void pa_log_levelv(enum pa_log_level level
, const char *format
, va_list ap
) {
70 assert(level
< PA_LOG_LEVEL_MAX
);
72 if ((e
= getenv(ENV_LOGLEVEL
)))
73 maximal_level
= atoi(e
);
75 if (level
> maximal_level
)
80 vfprintf(stderr
, format
, ap
);
84 openlog(log_ident
? log_ident
: "???", LOG_PID
, LOG_USER
);
85 vsyslog(level_to_syslog
[level
], format
, ap
);
90 char *t
= pa_vsprintf_malloc(format
, ap
);
91 assert(user_log_func
);
92 user_log_func(level
, t
);
102 void pa_log_level(enum pa_log_level level
, const char *format
, ...) {
104 va_start(ap
, format
);
105 pa_log_levelv(level
, format
, ap
);
109 void pa_log_debug(const char *format
, ...) {
111 va_start(ap
, format
);
112 pa_log_levelv(PA_LOG_DEBUG
, format
, ap
);
116 void pa_log_info(const char *format
, ...) {
118 va_start(ap
, format
);
119 pa_log_levelv(PA_LOG_INFO
, format
, ap
);
123 void pa_log_notice(const char *format
, ...) {
125 va_start(ap
, format
);
126 pa_log_levelv(PA_LOG_INFO
, format
, ap
);
130 void pa_log_warn(const char *format
, ...) {
132 va_start(ap
, format
);
133 pa_log_levelv(PA_LOG_WARN
, format
, ap
);
137 void pa_log_error(const char *format
, ...) {
139 va_start(ap
, format
);
140 pa_log_levelv(PA_LOG_ERROR
, format
, ap
);