Sou desenvolvedor de uma empresa cujos produtos são implantados no exterior. Quando uma equipe de suporte pergunta sobre a definição de um problema, minhas únicas ferramentas para diagnóstico são meus arquivos de log e uma cópia do banco de dados do cliente. Usando o banco de dados e meu ambiente de desenvolvimento, tenho a oportunidade de reproduzir o caso incorreto, porque registro os dados recebidos no meu módulo e as ações relacionadas. Se eu conseguir reproduzir o erro com a ajuda dos dados coletados, posso corrigi-lo com a depuração. Se eu não tivesse arquivos de log, teria que depender da descrição do cliente ou da equipe de suporte do que acontece em que caso (o que tem uma grande chance de enganar).
Em segundo lugar, o registro me dá a chance de detectar os gargalos do meu módulo no site implantado, pois registro a data e a hora de determinadas ações e, em seguida, posso ver qual ação consome quanto tempo.
Além disso, suponha que nossa solução seja composta por 6 módulos e eu esteja vendo logs de erro nos meus arquivos de log sobre tempos limite do banco de dados. Se esses erros também estiverem registrados em 5 dos outros módulos, a probabilidade de que este seja um problema relacionado ao servidor SQL aumenta. Se isso for registrado apenas no meu módulo, a probabilidade de minhas consultas serem com erros aumentará. Eu acho que esses tipos de coisas são indicadores úteis.
O tipo de dados que vejo nos meus arquivos de log depende da configuração do nível de log. Se este for um produto novo, definimos o nível de log como "Todos" para reunir o máximo de dados possível. Porém, quando aprimoramos o produto, podemos preferir manter o nível de log em "Erro" para registrar apenas o erro, mas não os logs de nível de informação, etc.