3 int __osrfLogType = -1;
4 int __osrfLogFacility = LOG_LOCAL0;
5 int __osrfLogActFacility = LOG_LOCAL1;
6 char* __osrfLogFile = NULL;
7 char* __osrfLogAppname = NULL;
8 int __osrfLogLevel = OSRF_LOG_INFO;
9 int __osrfLogActivityEnabled = 1;
12 void osrfLogInit( int type, const char* appname, int maxlevel ) {
14 if(appname) osrfLogSetAppname(appname);
15 osrfLogSetLevel(maxlevel);
16 if( type == OSRF_LOG_TYPE_SYSLOG )
17 openlog(__osrfLogAppname, 0, __osrfLogFacility );
20 void osrfLogSetType( int logtype ) {
21 if( logtype != OSRF_LOG_TYPE_FILE &&
22 logtype != OSRF_LOG_TYPE_SYSLOG ) {
23 fprintf(stderr, "Unrecognized log type. Logging to stderr\n");
26 __osrfLogType = logtype;
29 void osrfLogSetFile( const char* logfile ) {
31 if(__osrfLogFile) free(__osrfLogFile);
32 __osrfLogFile = strdup(logfile);
35 void osrfLogSetActivityEnabled( int enabled ) {
36 __osrfLogActivityEnabled = enabled;
39 void osrfLogSetAppname( const char* appname ) {
41 if(__osrfLogAppname) free(__osrfLogAppname);
42 __osrfLogAppname = strdup(appname);
44 /* if syslogging, re-open the log with the appname */
45 if( __osrfLogType == OSRF_LOG_TYPE_SYSLOG) {
47 openlog(__osrfLogAppname, 0, __osrfLogFacility);
51 void osrfLogSetSyslogFacility( int facility ) {
52 __osrfLogFacility = facility;
54 void osrfLogSetSyslogActFacility( int facility ) {
55 __osrfLogActFacility = facility;
58 void osrfLogSetLevel( int loglevel ) {
59 __osrfLogLevel = loglevel;
62 void osrfLogError( const char* msg, ... ) { OSRF_LOG_GO(msg, OSRF_LOG_ERROR); }
63 void osrfLogWarning( const char* msg, ... ) { OSRF_LOG_GO(msg, OSRF_LOG_WARNING); }
64 void osrfLogInfo( const char* msg, ... ) { OSRF_LOG_GO(msg, OSRF_LOG_INFO); }
65 void osrfLogDebug( const char* msg, ... ) { OSRF_LOG_GO(msg, OSRF_LOG_DEBUG); }
66 void osrfLogInternal( const char* msg, ... ) { OSRF_LOG_GO(msg, OSRF_LOG_INTERNAL); }
67 void osrfLogActivity( const char* msg, ... ) {
68 OSRF_LOG_GO(msg, OSRF_LOG_ACTIVITY);
69 /* activity log entries are also logged as info intries */
70 osrfLogDetail( OSRF_LOG_INFO, NULL, -1, NULL, VA_BUF );
73 void osrfLogDetail( int level, char* filename, int line, char* func, char* msg, ... ) {
75 if( level == OSRF_LOG_ACTIVITY && ! __osrfLogActivityEnabled ) return;
76 if( level > __osrfLogLevel ) return;
78 if(!filename) filename = "";
83 if(line >= 0) snprintf(lb,12,"%d", line);
85 char* l = "INFO"; /* level name */
86 int lvl = LOG_INFO; /* syslog level */
87 int fac = __osrfLogFacility;
95 case OSRF_LOG_WARNING:
110 case OSRF_LOG_INTERNAL:
115 case OSRF_LOG_ACTIVITY:
118 fac = __osrfLogActFacility;
122 VA_LIST_TO_STRING(msg);
124 if(__osrfLogType == OSRF_LOG_TYPE_SYSLOG )
125 syslog( fac | lvl, "[%s:%d:%s:%s:%s] %s", l, getpid(), filename, lb, func, VA_BUF );
127 else if( __osrfLogType == OSRF_LOG_TYPE_FILE )
128 _osrfLogToFile("[%s:%d:%s:%s:%s] %s", l, getpid(), filename, lb, func, VA_BUF );
133 void _osrfLogToFile( char* msg, ... ) {
136 if(!__osrfLogFile) return;
137 VA_LIST_TO_STRING(msg);
139 if(!__osrfLogAppname) __osrfLogAppname = strdup("osrf");
140 int l = strlen(VA_BUF) + strlen(__osrfLogAppname) + 36;
146 time_t t = time(NULL);
147 struct tm* tms = localtime(&t);
148 strftime(datebuf, 36, "%Y-%m-%d %h:%m:%s", tms);
150 FILE* file = fopen(__osrfLogFile, "a");
152 fprintf(stderr, "Unable to fopen file %s for writing", __osrfLogFile);
156 fprintf(file, "%s %s %s\n", __osrfLogAppname, datebuf, VA_BUF );
157 if( fclose(file) != 0 )
158 osrfLogWarning("Error closing log file: %s", strerror(errno));
163 int osrfLogFacilityToInt( char* facility ) {
164 if(!facility) return LOG_LOCAL0;
165 if(strlen(facility) < 6) return LOG_LOCAL0;
166 switch( facility[5] ) {
167 case '0': return LOG_LOCAL0;
168 case '1': return LOG_LOCAL1;
169 case '2': return LOG_LOCAL2;
170 case '3': return LOG_LOCAL3;
171 case '4': return LOG_LOCAL4;
172 case '5': return LOG_LOCAL5;
173 case '6': return LOG_LOCAL6;
174 case '7': return LOG_LOCAL7;