2 // Copyright (c) 2001, Bit Farm, Inc. All rights reserved.
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions
7 // 1. Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // 2. Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // 3. The name of the author may not be used to endorse or promote products
13 // derived from this software without specific prior written permission.
15 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 // OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 // IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 // NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 * The root category's default logging function.
33 extern const char *gras_log_priority_names[7];
35 static void append_file(gras_log_appender_t* this, gras_log_event_t* ev);
38 struct gras_log_appender_file_s {
39 gras_log_appender_t* appender;
44 static gras_log_appender_t gras_log_appender_file = { append_file, NULL } ;
45 /* appender_data=FILE* */
47 gras_log_appender_t* gras_log_default_appender = &gras_log_appender_file;
49 static void append_file(gras_log_appender_t* this, gras_log_event_t* ev) {
51 // TODO: define a format field in struct for timestamp, etc.
54 // struct DefaultLogAppender* this = (struct DefaultLogAppender*)this0;
56 if ((FILE*)(this->appender_data) == NULL)
57 this->appender_data = (void*)stderr;
59 if (ev->priority < 0) {
60 pn = "Negative Priority NOT ALLOWED!!";
62 else if (ev->priority < sizeof(gras_log_priority_names)) {
63 pn = gras_log_priority_names[ev->priority];
66 gras_log_priority_names[sizeof(gras_log_priority_names)-1],
67 ev->priority - sizeof(gras_log_priority_names) + 1);
69 fprintf(stderr, "%s:%d: ", ev->fileName, ev->lineNum);
70 fprintf(stderr, "[%s/%s] ", ev->cat->name,pn);
71 vfprintf(stderr, ev->fmt, ev->ap);
72 fprintf(stderr, "\n");