Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d385a7166bc0586a4b67e1099a3d8df534e477e5
[simgrid.git] / src / xbt / log_default_appender.c
1 // $Id$
2 // Copyright (c) 2001, Bit Farm, Inc. All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions
6 // are met:
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.
14 // 
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.
25
26 #include <gras.h>
27 #include <stdio.h>
28
29 /**
30  * The root category's default logging function.
31  */
32
33 extern const char *gras_log_priority_names[7];
34
35 static void append_file(gras_log_appender_t* this, gras_log_event_t* ev);
36
37 /*
38 struct gras_log_appender_file_s {
39   gras_log_appender_t* appender;
40   FILE *file;
41 };
42 */
43
44 static gras_log_appender_t gras_log_appender_file = { append_file, NULL } ;
45 /* appender_data=FILE* */
46
47 gras_log_appender_t* gras_log_default_appender  = &gras_log_appender_file;
48
49 static void append_file(gras_log_appender_t* this, gras_log_event_t* ev) {
50
51     // TODO: define a format field in struct for timestamp, etc.
52     const char *pn;
53     char buf[20];
54     //    struct DefaultLogAppender* this = (struct DefaultLogAppender*)this0;
55     
56     if ((FILE*)(this->appender_data) == NULL)
57       this->appender_data = (void*)stderr;
58     
59     if (ev->priority < 0) {
60         pn = "Negative Priority NOT ALLOWED!!";
61     }
62     else if (ev->priority < sizeof(gras_log_priority_names)) {
63         pn = gras_log_priority_names[ev->priority];
64     } else {
65         sprintf(buf, "%s+%d",
66                 gras_log_priority_names[sizeof(gras_log_priority_names)-1],
67                 ev->priority - sizeof(gras_log_priority_names) + 1);
68     }
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");
73 }