~drizzle-trunk/drizzle/development

1548.2.1 by Barry.Leslie at PrimeBase
Added the PBMS daemon plugin.
1
/* Copyright (c) 2008 PrimeBase Technologies GmbH, Germany
2
 *
3
 * PrimeBase Media Stream for MySQL
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
1802.10.2 by Monty Taylor
Update all of the copyright headers to include the correct address.
17
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1548.2.1 by Barry.Leslie at PrimeBase
Added the PBMS daemon plugin.
18
 *
19
 * Original author: Paul McCullagh (H&G2JCtL)
20
 * Continued development: Barry Leslie
21
 *
22
 * 2007-05-20
23
 *
24
 * CORE SYSTEM:
25
 * General logging class
26
 *
27
 */
28
29
#ifndef __CSLOG_H__
30
#define __CSLOG_H__
31
32
using namespace std;
33
34
#include "stdio.h"
35
36
#include "CSDefs.h"
37
#include "CSString.h"
38
39
class CSLog {
40
public:
41
	static const int Protocol = 0;
42
	static const int Error = 1;
43
	static const int Warning = 2;
44
	static const int Trace = 3;
45
46
	CSLog(FILE *s, int level):
47
		iStream(s),
1548.2.2 by Barry.Leslie at PrimeBase
A lot of minor changes to clean up the code and to get it to build with Drizzle.
48
		iHeaderPending(true),
1548.2.1 by Barry.Leslie at PrimeBase
Added the PBMS daemon plugin.
49
		iLogLevel(level),
1548.2.2 by Barry.Leslie at PrimeBase
A lot of minor changes to clean up the code and to get it to build with Drizzle.
50
		iLockThread(0),
51
		iLockCount(0)
52
		 {
1548.2.1 by Barry.Leslie at PrimeBase
Added the PBMS daemon plugin.
53
		pthread_mutex_init(&iMutex, NULL);
54
	}
55
56
	virtual ~CSLog() {
57
		iLockThread = 0;
58
		iLockCount = 0;
59
		pthread_mutex_destroy(&iMutex);
60
	}
61
62
	void lock() {
63
		pthread_t	thd = pthread_self();
64
65
		if (iLockCount > 0 && pthread_equal(iLockThread, thd))
66
			iLockCount++;
67
		else {
68
			pthread_mutex_lock(&iMutex);
69
			iLockThread = thd;
70
			iLockCount = 1;
71
		}
72
	}
73
74
	void unlock() {
75
		if (iLockCount > 0) {
76
			iLockCount--;
77
			if (iLockCount == 0)
78
				pthread_mutex_unlock(&iMutex);
79
		}
80
	}
81
82
	void getNow(char *buffer, size_t len);
83
	void log(CSThread *self, const char *func, const char *file, int line, int level, const char* buffer);
84
	void log(CSThread *self, int level, const char*);
85
	void log(CSThread *self, int level, CSString&);
86
	void log(CSThread *self, int level, CSString*);
87
	void log(CSThread *self, int level, int);
88
	void eol(CSThread *self, int level);
89
90
	void logLine(CSThread *self, int level, const char *buffer);
91
	
92
	void flush() {fflush(iStream);}
93
private:
94
	/* Write out a logging header: */
95
	void header(CSThread *self, const char *func, const char *file, int line, int level);
96
97
	/* The output stream: */
98
	FILE *iStream;
99
100
	bool iHeaderPending;		/* True if we must write a header before the next text. */
101
102
	int iLogLevel;				/* The current log level. */
103
104
	pthread_t iLockThread;
105
	int iLockCount;
1548.2.2 by Barry.Leslie at PrimeBase
A lot of minor changes to clean up the code and to get it to build with Drizzle.
106
	pthread_mutex_t	iMutex;
1548.2.1 by Barry.Leslie at PrimeBase
Added the PBMS daemon plugin.
107
};
108
109
extern CSLog CSL;
110
111
#endif