I know this is an old post but I recently went through this as well (for different reasons) and came up with the following solution.
Freenas will by default use UDP via the syslog-ng service. For whatever reason this wasn't playing nicely with our graylog syslog server. We suspected the timestamps were malformed (found via tcpdump) and graylog was refusing the packets. Our hack was to change a line in this file: /usr/local/etc/syslog-ng.conf.
destination loghost { udp("[ServerName]" port(514) localport(514)); };
to:
destination loghost { syslog("[ServerName]" port(514) localport(514)); };
This startup command keeps it constant after reboots since the file is overwritten at startup:
sed -i -e 's/{ udp(/{ syslog(/g' /usr/local/etc/syslog-ng.conf && service syslog-ng restart
Since then we've been receiving syslog messages fine via TCP.