Eitherways, I have a patch that cleanly applies on trunk.
Basically the kafka-run-class.sh has a lot of .sh clients which use it. A majority of these clients are non-daemon and a couple (zk and kafkaServer) are daemons. For the non daemons, we don't need gc logs so I have the following settings:
-XX:+AggressiveOpts -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC
For the daemon processes (zk and kafkaServer) I have the above options set + the options to emit GC Logs.
-Xloggc:$base_dir/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
Where GC_LOG_FILE_NAME is either zookeeper_gc.log or kafkaServer_gc.log depending on which is the daemon that is run. This is done, so that when developers run both zk and kafkaServer on the same filesystem, the two processes don't clobber the same file.