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