Indica ao apache para converter o LF em CRLF para text / plain

2

O problema: desejo veicular CRLF dos arquivos codificados como LF

Eu tenho um servidor web apache2 httpd baseado em linux configurado para servir arquivos de log (grandes) ( *.log ) gerados por um simulador baseado em linux.

Esses arquivos de log têm o estilo LF final em estilo Unix, em vez de CRLF no estilo Windows. CRLF também é o padrão para arquivos de texto no protocolo http .

Quando os visualizo usando um navegador no Windows, eles são carregados no Notepad.exe e todo o texto está (incorretamente) na mesma linha; a menos que eu renomeie os logs no servidor de *.log para *.txt .

Parece que o Microsoft Windows provavelmente está manipulando *.txt especialmente, e convertendo os finais conforme eles chegam.

Dadas essas dicas, como posso alterar a configuração para que os usuários do cliente vejam os arquivos corretamente, independentemente de sua plataforma / navegador.

Mais detalhes sobre o problema: por que não consigo fazer a coisa óbvia

Analisando os registros, descubro que .txt é exibido como mime-type text/plain e .log como text/x-log , mas a comutação de .log para text/plain usando SetType não resolveu o problema .

Em um sistema de produção, não irei facilmente alterar os arquivos para finalizar em .txt .

Os registros são muito numerosos e grandes para que eu queira converter usando (por exemplo, unix2dos ) e salvar outra cópia. Isso também me forçaria a gerenciar um cache adicional de arquivos convertidos que precisariam ser invalidados, limpos etc, ou para alterar os arquivos originais, o que pode quebrar outros sistemas que os consomem.

  1. Existe um parâmetro de configuração httpd do Apache que informa ao Windows / Internet Explorer (e outro sistema operacional / navegador) que ele precisa para expandir LF para CRLF à medida que chega?
  2. OR Posso de alguma forma dizer ao Apache para substituir LF por CRLF enquanto ele é usado?

O que tentei

Eu olhei para o módulo do Apache mod_mime e suas diretivas AddType e AddCharset mas estes não corrigem o problema, nem mesmo afirmam.

A documentação do Apache é silenciosa na questão de fim de linha.

A documentação MIME no tipo text diz que o conteúdo deve estar no formato CRLF .

Também parece que a terminação de linha não é considerada pelos padrões de codificação do conjunto de caracteres.

    
por Alex Brown 15.09.2011 / 17:52

2 respostas

3

Parece que você vai ter muitos problemas para contornar uma limitação (IMHO severa) no Bloco de Notas. Seria possível instalar um editor de texto mais inteligente no sistema, por ex. Notepad ++?

    
por 15.09.2011 / 19:26
3

A solução (imperfeita) na qual me decidi é usar o mod_ext_filter do Apache:

ExtFilterDefine logwin mode=output cmd=/usr/bin/unix2dos intype=text/x-log
AddOutputFilter logwin .log
# Note that apache2 defines .log as having mime-type text/x-log by default.

Essencialmente, isso diz que para qualquer arquivo que termine em .log , ele deve ser passado por um conversor de finalização de linha antes da entrega ao cliente.

Esta não é uma ótima solução para máquinas muito carregadas, já que o fork unix2dos é mais lento do que o processo interno do Apache. Também requer conversão para cada leitura do arquivo, o que é ineficiente.

Infelizmente, a fundação apache não forneceu um filtro mod interno para este cenário e não tenho tempo para escrever / manter um.

No entanto, não espero alta carga nesta máquina, assim medida pelo esforço de engenharia, essa é uma boa solução.

  • Está de acordo com mime specs para text / plain codificando CRLF no fio
  • Não requer nenhuma ação especial no final do cliente. Embora eu esteja feliz em usar um editor de texto melhor, não posso esperar que todos os usuários mudem em
  • Reconfiguração fácil se eu precisar mover servidores da web
  • Não requer que o gerador de log use um formato de fim de linha não nativo (não unix)
por 16.09.2011 / 01:05