It should be possible for sysklogd to check if a write is going to block by setting O_NONBLOCK on the file descriptor. If the write fails with EAGAIN, the pipe is full. It's easy enough to tell if something is a pipe or named pipe using fstat().
Bruce