Apache opens the log files when it starts up (and closes/reopens them when you send a HUP), and then keeps them open for the life of the server. As such, there's a one-time file opening and seeking cost, after which data is simply appended to the log.
Even if it was doing an open/seek/write/close operation, seeking to the end of a file is a relatively lightweight operation. Doing this hundreds or thousands of times a second (for a busy site) would start getting expensive.
20gig of error data, however, does seem excessive. That's a LOT of 404's and whatnot. Depending on how long you've had this log kicking around, you might want to go in with a machete and start weeding out some of the more obvious errors (like many repeated failed requests for robots.txt or favicon.ico returning 404s).
You can use Apache's own "rotatelogs" to automatically rotate things for you, or use the system's own log cleanup facilities.