script — make typescript of terminal session:
script -c "myprogram" file.log
The whole session will be logged to file.log
The simpler form could be
tee >(myprogram) | tee -a file.log
If you want to prevent input being shown again to the screen:
tee -a file.log | myprogram | tee -a file.log
As two processes can't read the same input two tees are needed, one which reads terminal input and writes to program standard input and file.log another which reads program standard output and writes into terminal output and file.log:
tee -a file.log | program | tee -a file.log