Well okay, I found a way to get line-feeds working =P
p = G_NewString(p); //insert line-breaks and stuff
G_LogPrintf( "announce: %s: %s\n", ent->client->pers.netname, p ); //log the action in the server console
trap_SendServerCommand( -1, va("cp \"%s\"", p) ); //print it on-screen
Mind you, I use a custom version of G_NewString which uses 'newb = (char*)malloc(l);' rather than 'newb = (char *) G_Alloc( l );'
free your memory! otherwise the server will crash after the function is called too many times.