First, if users are able to delete files that they shouldn't delete, you have a bigger problem. File permissions should be set so that regular (non-root) users can not do serious damage. I would first investigate this. If all users use the same account, consider creating an account for each user. Do not give anyone (except the system administrators) the root password.
To capture all output of a single command you can use the script
command:
$ script outputfile.txt vi
Script started, output file is outputfile.txt
Script done, output file is outputfile.txt
$
You can view "outputfile.txt" to see everything the user did while using vi.
However I'm not sure how you would use this to capture all output. You could run "script outputfile.txt bash" as their shell, but that doesn't seem to work.
I wrote this script, called it /usr/bin/capture-bash and created a user that had it as its shell. Sadly it didn't work but I don't understand why.
#!/bin/bash
username="${USER:-unknown}"
filename="/var/tmp/${username}.$(date -u +%Y%m%d).log"
echo "START_TIME=$(date -u +%Y%m%d-%H%M%S)" >>"$filename"
echo "IP_ADDRESS=$SSH_CLIENT" >>"$filename"
script -e -q -a "$filename" bash
echo "END_TIME=$(date -u +%Y%m%d-%H%M%S)" >>"$filename"
If this did work, you'd have another problem: the user would be able to delete the file. You could fix that many ways: use a modified version of /usr/bin/login, write the file to a write-only directory https://unix.stackexchange.com/questions/22577 and other techniques.