Log4J produz vários arquivos de log personalizados
Se você precisar produzir arquivos de log independentes nos aplicativos reais, como você pode separar o conteúdo necessário do log original e formar um arquivo de log separado?
Vamos primeiro olhar para um arquivo comum de log4j.properties, que registra os logs nos arquivos do console e teste.log:
A cópia do código é a seguinte:
log4j.rootlogger = Debug, stdout, logfile
log4j.appender.stdout = org.apache.log4j.consoleppender
log4j.appender.stdout.layout = org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionPattern =%d%p [%c] -%m%n
log4j.appender.logfile = org.apache.log4j.rollingFilePpender
log4j.appender.logfile.file = log/test.log
log4j.appender.logfile.maxfilesize = 128MB
log4j.appender.logfile.maxbackupIndex = 3
log4j.appender.logfile.layout = org.apache.log4j.patternlayout
log4j.appender.logfile.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
E se vários arquivos de log precisarem ser emitidos na mesma classe? De fato, a verdade é a mesma.
A cópia do código é a seguinte:
Loger estático privado Logger1 = LogFactory.getLog ("MyLogger1");
LOGGERGER DE ESTÁTICO PRIVADO2 = LOGFACTORY.GETLOG ("MyLogger2");
A configuração em log4j.properties é a seguinte:
A cópia do código é a seguinte:
log4j.logger.mylogger1 = Debug, test1
log4j.appender.test1 = org.apache.log4j.FileAppender
log4j.appender.test1.file = log/test1.log
log4j.appender.test1.layout = org.apache.log4j.patternlayout
log4j.appender.test1.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
log4j.logger.mylogger2 = Debug, test2
log4j.appender.test2 = org.apache.log4j.FileAppender
log4j.appender.test2.file = log/test2.log
log4j.appender.test2.layout = org.apache.log4j.patternlayout
log4j.appender.test2.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
Diferentes logs devem ser usados para diferentes logs (por exemplo, Logger1.info ("ABC") devem ser usados para saída para test1.log).
Outro problema é que esses logs personalizados são emitidos para os logs configurados por log4j.rootlogger por padrão. Não se preocupe, aqui está um interruptor:
log4j.additivity
Ele é usado para definir a saída para o log configurado pelo log4j.rootlogger ao mesmo tempo.
No entanto, esse método tem uma pequena falha, ou seja, o nome da classe no log impresso pode ser apenas MyLogger ou MyLogger2.
2 caminhos de configuração dinâmica
Se o caminho de log exigido pelo programa precisar ser constantemente alterado e é impossível alterar o arquivo de configuração sempre, você poderá usar variáveis de ambiente para resolvê -lo.
A configuração do log4j é a seguinte:
A cópia do código é a seguinte:
log4j.rootlogger = Debug, Infolog, DebugLog
#Info log
log4j.appender.infolog = org.apache.log4j.dailyrollingFilePpender
log4j.appender.infolog.file = $ {log.dir}/$ {log.info.file}
log4j.appender.infolog.datepattern = .yyyy-mm-dd
log4j.appender.infolog.threshold = info
log4j.appender.infolog.layout = org.apache.log4j.patternlayout
log4j.appender.infolog.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
#Debug Log
log4j.appender.debuglog = org.apache.log4j.rollingFileAppender
log4j.appender.debuglog.file = $ {log.dir}/$ {log.debug.file}
log4j.appender.debuglog.threshold = Debug
log4j.appender.debuglog.maxfilesize = 128MB
log4j.appender.debuglog.maxbackupIndex = 3
log4j.appender.debuglog.layout = org.apache.log4j.patternlayout
log4j.appender.debuglog.layout.conversionPattern =%d {yyyy-mm-dd hh: mm: ss}%-5p [%t]%c.%m (%l)-%m%n
No momento, antes de usar o log para imprimir o log, você precisa usar o sistema para definir o caminho de saída e o nome do arquivo Variáveis de ambiente:
A cópia do código é a seguinte:
System.setProperty ("log.dir", logdir);
System.setProperty ("log.info.file", InfologFilename);
System.setProperty ("log.debug.file", depurLogfileName);
Anexo: o significado do formato do parâmetro de padrão
%c o nome completo da classe à qual as informações do log pertencem
%D produz a data ou hora do tempo de log. : 2013-8-19-222:10:28
%f o nome da classe da classe à qual as informações do log pertencem
%l O evento de log de saída ocorre, ou seja, a afirmação de que produz informações do log está em que linha da classe está localizada
%m emitir as informações especificadas no código, como mensagem no log (mensagem)
%n produz uma quebra de linha de retorno do carro, a plataforma do Windows é "/r/n" e a plataforma Unix é "/n"
%p prioridade de saída, ou seja, depuração, informações, aviso, erro, fatal. Se for produzido ligando para depure (), é depuração e assim por diante
%r saída O número de milissegundos retirados do início do aplicativo para produzir as informações do log
%t produz o nome do encadeamento que gera o evento de log