One benefit of log scanning vs using the job's return code to detect problems is it allows each job to customize the definition of failure.
For example, almost all of my jobs will treat notes about uninitialized variables, missing values be calculated, and automatic type conversions as errors that I consider job failure. But some programs are written to allow such messages (unfortunately). If I inherit a job which is designed to use automatic type conversions, I can easily turn off that check in my log scanner, while leaving the check on for other jobs.
... View more