Haskell indirectly solves this by separating `trace` (a form of logging) from IO (trace is a procedure that logs function call while all other IO must be contained in an IO monad).
Had an awesome experience with german Amazon support - he was very friendly and helpful, sent an e-mail afterwards where he explained how the problem occured in more detail and got in touch with their tech team, which fixed the problem in few hours and then send me a handwritten e-mail (not automated) apologizing for the problem.
if the practices used by the company were so bad and abusive, shouldn't the customers just move to another company? Voila, problem solved, the company no longer has monopoly.