summaryrefslogtreecommitdiff
path: root/libdleyna/core/log.h
blob: a99056e3b237c70829e6d0f83dec4485a17f2e31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * dLeyna
 *
 * Copyright (C) 2012-2015 Intel Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU Lesser General Public License,
 * version 2.1, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Ludovic Ferrandis <ludovic.ferrandis@intel.com>
 *
 */

#ifndef DLEYNA_LOG_H__
#define DLEYNA_LOG_H__

#include <glib.h>
#include <syslog.h>

enum dleyna_log_type_t_ {
	DLEYNA_LOG_TYPE_SYSLOG = 0,
	DLEYNA_LOG_TYPE_GLIB,
	DLEYNA_LOG_TYPE_FILE
};
typedef enum dleyna_log_type_t_ dleyna_log_type_t;

void dleyna_log_init(const char *program, const char *version);

void dleyna_log_finalize(void);

void dleyna_log_update_type_level(dleyna_log_type_t log_type, int log_level);

void dleyna_log_trace(int priority, GLogLevelFlags flags,
		      const char *format, ...)
					__attribute__((format(printf, 3, 4)));

/* Generic Logging macro
 */
#ifdef DLEYNA_DEBUG_ENABLED
	#define DLEYNA_LOG_HELPER(priority, flags, fmt, ...)    \
			dleyna_log_trace(priority, flags, "%s : %s() --- " fmt,\
				      __FILE__, __func__, ## __VA_ARGS__);
#else
	#define DLEYNA_LOG_HELPER(priority, flags, fmt, ...) \
			dleyna_log_trace(priority, flags, fmt, ## __VA_ARGS__);
#endif


/* Logging macro for error messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_ERROR
	#define DLEYNA_LOG_ERROR(...) \
		DLEYNA_LOG_HELPER(LOG_ERR, G_LOG_LEVEL_ERROR, __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_ERROR(...)
#endif


/* Logging macro for critical messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_CRITICAL
	#define DLEYNA_LOG_CRITICAL(...) \
		DLEYNA_LOG_HELPER(LOG_CRIT, G_LOG_LEVEL_CRITICAL, \
				  __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_CRITICAL(...)
#endif


/* Logging macro for warning messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_WARNING
	#define DLEYNA_LOG_WARNING(...) \
		DLEYNA_LOG_HELPER(LOG_WARNING, G_LOG_LEVEL_WARNING, \
				  __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_WARNING(...)
#endif


/* Logging macro for messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_MESSAGE
	#define DLEYNA_LOG_MESSAGE(...) \
		DLEYNA_LOG_HELPER(LOG_NOTICE, G_LOG_LEVEL_MESSAGE, \
				  __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_MESSAGE(...)
#endif


/* Logging macro for informational messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_INFO
	#define DLEYNA_LOG_INFO(...) \
		DLEYNA_LOG_HELPER(LOG_INFO, G_LOG_LEVEL_INFO, __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_INFO(...)
#endif


/* Logging macro for debug messages
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG
	#define DLEYNA_LOG_DEBUG(...) \
		DLEYNA_LOG_HELPER(LOG_DEBUG, G_LOG_LEVEL_DEBUG, __VA_ARGS__, 0)
#else
	#define DLEYNA_LOG_DEBUG(...)
#endif


/* Logging macro to display an empty line
 */
#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG
	#define DLEYNA_LOG_DEBUG_NL() \
			dleyna_log_trace(LOG_DEBUG, G_LOG_LEVEL_DEBUG, " ");
#else
	#define DLEYNA_LOG_DEBUG_NL()
#endif

#endif /* DLEYNA_LOG_H__ */