Coming some late on this question, considering this kind of work as an important part of monitoring job, here is my (not so short) answer...
Following logs using bash
1. Command tail
This command is a little more porewfull than read on already published answer
- Difference between follow option - tail -fand- tail -F, from manpage:
 - 
-    -f, --follow[={name|descriptor}]
          output appended data as the file grows;
...
   -F     same as --follow=name --retry
...
   --retry
          keep trying to open a file if it is inaccessible
 
 - This mean: by using - -Finstead of- -f,- tailwill re-open file(s) when removed (on log rotation, for sample).
 This is usefull for watching logfile over many days.
 
- Ability of following more than one file simultaneously
 I've already used:
 - tail -F /var/www/clients/client*/web*/log/{error,access}.log /var/log/{mail,auth}.log \
           /var/log/apache2/{,ssl_,other_vhosts_}access.log \
           /var/log/pure-ftpd/transfer.log
 - For following events through hundreds of files... (consider rest of this answer to understand how to make it readable... ;) 
- Using switches - -n(Don't use- -cfor line buffering!).
 By default- tailwill show 10 last lines. This can be tunned:
 - tail -n 0 -F file
 - Will follow file, but only new lines will be printed - tail -n +0 -F file
 - Will print whole file before following his progression. 
2. Buffer issues when piping:
If you plan to filter ouptuts, consider buffering! See -u option for sed, --line-buffered for grep, or stdbuf command:
tail -F /some/files | sed -une '/Regular Expression/p'
Is (a lot more efficient than using grep) a lot more reactive than if you does'nt use -u switch in sed command.
tail -F /some/files |
    sed -une '/Regular Expression/p' |
    stdbuf -i0 -o0 tee /some/resultfile
3. Recent journaling system
On recent system, instead of tail -f /var/log/syslog you have to run journalctl -xf, in near same way...
journalctl -axf | sed -une '/Regular Expression/p'
But read man page, this tool was built for log analyses!
4. Integrating this in a bash script
- Colored output of two files (or more) - Here is a sample of script watching for many files, coloring ouptut differently for 1st file than others: - #!/bin/bash
tail -F "$@" |
    sed -une "
        /^==> /{h;};
        //!{
            G;
            s/^\\(.*\\)\\n==>.*${1//\//\\\/}.*<==/\\o33[47m\\1\\o33[0m/;
            s/^\\(.*\\)\\n==> .* <==/\\o33[47;31m\\1\\o33[0m/;
            p;}"
 - They work fine on my host, running: - sudo ./myColoredTail /var/log/{kern.,sys}log
 
- Interactive script - You may be watching logs for reacting on events? - Here is a little script playing some sound when some USB device appear or disappear, but same script could send mail, or any other interaction, like powering on coffe machine... - #!/bin/bash
exec {tailF}< <(tail -F /var/log/kern.log)
tailPid=$!
while :;do
    read -rsn 1 -t .3 keyboard
    [ "${keyboard,}" = "q" ] && break
    if read -ru $tailF -t 0 _ ;then
        read -ru $tailF line
        case $line in
            *New\ USB\ device\ found* ) play /some/sound.ogg ;;
            *USB\ disconnect* ) play /some/othersound.ogg ;;
        esac
        printf "\r%s\e[K" "$line"
    fi
done
echo
exec {tailF}<&-
kill $tailPid
 - You could quit by pressing Q key.