Hi,

Sorry for the cross-posting, but I think that this problem effects ser
and openser.
I managed to "fix" the "newline with syslog" thing ... sure, it is a
hack, but it works for me. Hope that you guys can get inspired and
figure out a better way. Basically, what I do is look for \n or \r,
print up to there, skip the rest of \n and \r and then go for the next
"line".

BTW, I am using FC3 (i've seen the same with more recent FCs).

Cesc

On 7/23/07, Cesc Santa <[EMAIL PROTECTED]> wrote:
Hi,

I just came across a strange "feature" in xlog for ser 0.9.6.
When I send output to stderr, no problem ... but using the same config
and sending to syslog, some xlog output gets trunkated :O

I have these lines in my config:
        xlog( "L_NOTICE",
"============================================================\n");
        xlog( "L_NOTICE", "==[%Tf]\n" );
        xlog( "L_NOTICE", "==[%is ## %pp]\n==\n" );

        #Print the whole received SIP message buffer ...
        xlog( "L_NOTICE", "\n%mb\n\n");

And this is what I get in /var/log/messages:
Jul 23 01:45:09 FC3lara /usr/local/sbin/cafesRouter[21957]:
=====================================
Jul 23 01:45:09 ser[21957]: ==[Mon Jul 23 01:45:09 2007]
Jul 23 01:45:09 ser[21957]: ==[192.168.200.141 ## 21957] ==
   ntent-Length: 0ne/1.65.377a (SJ Labs)000000;rport2.0

As you can see, the part of xlog which prints the sip message gets
truncated ... it only prints the last part (ntent-Length .... ).

Ideas?

Cesc

Index: modules/xlog/xlog.c
===================================================================
--- modules/xlog/xlog.c	(revision 246)
+++ modules/xlog/xlog.c	(working copy)
@@ -124,14 +124,48 @@
 {
 	int log_len;
 
+	int log_len_temp;
+	int log_len_counter;
+	char * bufferPointer;
+
 	log_len = buf_size;
 
 	if(xl_print_log(msg, (xl_elog_t*)frm, log_buf, &log_len)<0)
 		return -1;
 
 	/* log_buf[log_len] = '\0'; */
-	LOG((int)(long)lev, "%.*s", log_len, log_buf);
+//	LOG((int)(long)lev, "%.*s", log_len, log_buf);
 
+	bufferPointer = log_buf;
+	log_len_temp = 0;
+	log_len_counter=0;
+	while( log_len_counter < log_len ) {
+		log_len_temp = 0;
+		//look for \n or \r
+		while( bufferPointer[log_len_temp] != '\n' && 
+				bufferPointer[log_len_temp] != '\r' ) {
+			if( log_len_counter >= log_len ) {
+				break; //reached end of buffer
+			}
+			log_len_temp++;
+			log_len_counter++;
+		}
+		
+		//add an end of line ... 
+		LOG((int)(long)lev, "%.*s\n", log_len_temp + 1, bufferPointer);
+
+		//skip all \n and \r ... look for next "line"
+		while( bufferPointer[log_len_temp] == '\n' || 
+				bufferPointer[log_len_temp] == '\r' ) {
+			if( log_len_counter >= log_len ) {
+				break; //reached end of buffer
+			}
+			log_len_temp++;
+			log_len_counter++;
+		}
+		bufferPointer += log_len_temp; //advance the buffer	
+	}
+
 	return 1;
 }
 
@@ -141,14 +175,48 @@
 {
 	int log_len;
 
+	int log_len_temp;
+	int log_len_counter;
+	char * bufferPointer;
+
 	log_len = buf_size;
 
 	if(xl_print_log(msg, (xl_elog_t*)frm, log_buf, &log_len)<0)
 		return -1;
 
 	/* log_buf[log_len] = '\0'; */
-	DBG("%.*s", log_len, log_buf);
+//	DBG("%.*s", log_len, log_buf);
 
+	bufferPointer = log_buf;
+	log_len_temp = 0;
+	log_len_counter=0;
+	while( log_len_counter < log_len ) {
+		log_len_temp = 0;
+		//look for \n or \r
+		while( bufferPointer[log_len_temp] != '\n' && 
+				bufferPointer[log_len_temp] != '\r' ) {
+			if( log_len_counter >= log_len ) {
+				break; //reached end of buffer
+			}
+			log_len_temp++;
+			log_len_counter++;
+		}
+		
+		//add an end of line ... 
+		DBG("%.*s\n", log_len_temp + 1, bufferPointer);
+
+		//skip all \n and \r ... look for next "line"
+		while( bufferPointer[log_len_temp] == '\n' || 
+				bufferPointer[log_len_temp] == '\r' ) {
+			if( log_len_counter >= log_len ) {
+				break; //reached end of buffer
+			}
+			log_len_temp++;
+			log_len_counter++;
+		}
+		bufferPointer += log_len_temp; //advance the buffer	
+	}
+
 	return 1;
 }
 
_______________________________________________
Users mailing list
Users@openser.org
http://openser.org/cgi-bin/mailman/listinfo/users

Reply via email to