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 osrfLogCleanup() {
13 free(__osrfLogAppname);
18 void osrfLogInit( int type, const char* appname, int maxlevel ) {
20 if(appname) osrfLogSetAppname(appname);
21 osrfLogSetLevel(maxlevel);
22 if( type == OSRF_LOG_TYPE_SYSLOG )
23 openlog(__osrfLogAppname, 0, __osrfLogFacility );
26 void osrfLogSetType( int logtype ) {
27 if( logtype != OSRF_LOG_TYPE_FILE &&
28 logtype != OSRF_LOG_TYPE_SYSLOG ) {
29 fprintf(stderr, "Unrecognized log type. Logging to stderr\n");
32 __osrfLogType = logtype;
35 void osrfLogSetFile( const char* logfile ) {
37 if(__osrfLogFile) free(__osrfLogFile);
38 __osrfLogFile = strdup(logfile);
41 void osrfLogSetActivityEnabled( int enabled ) {
42 __osrfLogActivityEnabled = enabled;
45 void osrfLogSetAppname( const char* appname ) {
47 if(__osrfLogAppname) free(__osrfLogAppname);
48 __osrfLogAppname = strdup(appname);
50 /* if syslogging, re-open the log with the appname */
51 if( __osrfLogType == OSRF_LOG_TYPE_SYSLOG) {
53 openlog(__osrfLogAppname, 0, __osrfLogFacility);
57 void osrfLogSetSyslogFacility( int facility ) {
58 __osrfLogFacility = facility;
60 void osrfLogSetSyslogActFacility( int facility ) {
61 __osrfLogActFacility = facility;
64 void osrfLogSetLevel( int loglevel ) {
65 __osrfLogLevel = loglevel;
68 void osrfLogError( const char* file, int line, const char* msg, ... )
69 { OSRF_LOG_GO(file, line, msg, OSRF_LOG_ERROR); }
70 void osrfLogWarning( const char* file, int line, const char* msg, ... )
71 { OSRF_LOG_GO(file, line, msg, OSRF_LOG_WARNING); }
72 void osrfLogInfo( const char* file, int line, const char* msg, ... )
73 { OSRF_LOG_GO(file, line, msg, OSRF_LOG_INFO); }
74 void osrfLogDebug( const char* file, int line, const char* msg, ... )
75 { OSRF_LOG_GO(file, line, msg, OSRF_LOG_DEBUG); }
76 void osrfLogInternal( const char* file, int line, const char* msg, ... )
77 { OSRF_LOG_GO(file, line, msg, OSRF_LOG_INTERNAL); }
78 void osrfLogActivity( const char* file, int line, const char* msg, ... ) {
79 OSRF_LOG_GO(file, line, msg, OSRF_LOG_ACTIVITY);
80 _osrfLogDetail( OSRF_LOG_INFO, file, line, VA_BUF ); /* also log at info level */
83 void _osrfLogDetail( int level, const char* filename, int line, char* msg ) {
85 if( level == OSRF_LOG_ACTIVITY && ! __osrfLogActivityEnabled ) return;
86 if( level > __osrfLogLevel ) return;
88 if(!filename) filename = "";
90 char* l = "INFO"; /* level name */
91 int lvl = LOG_INFO; /* syslog level */
92 int fac = __osrfLogFacility;
100 case OSRF_LOG_WARNING:
115 case OSRF_LOG_INTERNAL:
120 case OSRF_LOG_ACTIVITY:
123 fac = __osrfLogActFacility;
127 if(__osrfLogType == OSRF_LOG_TYPE_SYSLOG )
128 syslog( fac | lvl, "[%s:%d:%s:%d] %s", l, getpid(), filename, line, msg );
130 else if( __osrfLogType == OSRF_LOG_TYPE_FILE )
131 _osrfLogToFile("[%s:%d:%s:%d] %s", l, getpid(), filename, line, msg );
136 void _osrfLogToFile( char* msg, ... ) {
139 if(!__osrfLogFile) return;
140 VA_LIST_TO_STRING(msg);
142 if(!__osrfLogAppname) __osrfLogAppname = strdup("osrf");
143 int l = strlen(VA_BUF) + strlen(__osrfLogAppname) + 36;
149 time_t t = time(NULL);
150 struct tm* tms = localtime(&t);
151 strftime(datebuf, 36, "%Y-%m-%d %H:%M:%S", tms);
153 FILE* file = fopen(__osrfLogFile, "a");
155 fprintf(stderr, "Unable to fopen file %s for writing", __osrfLogFile);
159 fprintf(file, "%s %s %s\n", __osrfLogAppname, datebuf, VA_BUF );
160 if( fclose(file) != 0 )
161 osrfLogWarning(OSRF_LOG_MARK, "Error closing log file: %s", strerror(errno));
166 int osrfLogFacilityToInt( char* facility ) {
167 if(!facility) return LOG_LOCAL0;
168 if(strlen(facility) < 6) return LOG_LOCAL0;
169 switch( facility[5] ) {
170 case '0': return LOG_LOCAL0;
171 case '1': return LOG_LOCAL1;
172 case '2': return LOG_LOCAL2;
173 case '3': return LOG_LOCAL3;
174 case '4': return LOG_LOCAL4;
175 case '5': return LOG_LOCAL5;
176 case '6': return LOG_LOCAL6;
177 case '7': return LOG_LOCAL7;