1. Visão geral
1.1 Antecedentes
O registro é muito importante em nosso desenvolvimento diário. A adição de registro nos aplicativos geralmente é baseada em três propósitos: monitorar as alterações nas variáveis no código, registrando -as periodicamente em arquivos para análise estatística por outros aplicativos; rastreando a trajetória de tempo de execução do código como base para futuras auditorias; Atuando como um depurador no ambiente de desenvolvimento integrado, imprimindo informações de depuração do código para o arquivo ou console.
1.2 Introdução
Log4J (log para Java) é um projeto de código aberto do Apache, que fornece uma maneira delicada de gerenciar logs. Através de um arquivo de configuração, podemos controlar o formato de saída e o destino de cada log com várias opções. Ao definir o nível de informação, também podemos alternar com flexibilidade as informações de feedback no código. Simplificando, o Log4J é uma biblioteca de API que ajuda os desenvolvedores a gerenciar a saída de log. Seu recurso mais importante é que o arquivo de configuração pode definir com flexibilidade a prioridade das informações do log, o destino de saída das informações do log e o formato de saída das informações do log.
2.Log4J Configuração
2.1Log4J Diagrama de classe
2.2 Definindo o arquivo de configuração
O LOG4J pode ser definido dinamicamente através dos programas Java. A desvantagem óbvia desse método é: se você precisar modificar o nível de saída do log e outras informações, deve modificar o arquivo Java e recompilá -lo, o que é muito problemático.
O uso de arquivos de configuração tornará nosso aplicativo mais flexível para configurar logs e os métodos de saída de log incluem prioridade de saída, destino de saída e formato de saída. O Log4J suporta dois formatos de arquivo de configuração, um é um arquivo XML e o outro é um arquivo de recurso Java Log4j.properties (key = value).
2.3 Arquivo de configuração log4j.properties
Quando o Log4J for chamado pela primeira vez, o Log4J localizará o arquivo no ClassPath (../Web-inf/class/, é claro, desde que o diretório esteja incluído no caminho de classe) e leia a configuração completa do arquivo. Este arquivo de configuração informa ao Log4J qual formato, que informação para a saída para onde está. Correspondentemente, precisamos configurar três aspectos:
1. Diretório raiz (nível e destino);
2. Destino (console, arquivo, etc.);
3. Estilo de saída (como exibir conteúdo de log)
Exemplos são os seguintes:
#Set log de log de saída
log4j.rootlogger = Debug, Appender1
#Output para console
log4j.appender.appender1 = org.apache.log4j.consoleppender
#Style é ttcclayout
log4j.appender.appender1.layout = org.apache.log4j.ttcclayout
2.4. Log4J Descrição de três componentes
O LOG4J possui três componentes principais: madeireiros, Appender (fonte de saída) e layout (layout). A combinação desses três componentes permite fácil registro do tipo e nível de informação e pode controlar o estilo e a localização da saída de log em tempo de execução. A seguir, estão os três componentes:
2.4.1 Logger Logger
O objeto Logger é usado para substituir o System.
O registrador de raiz está configurado com a sintaxe:
log4j.rootlogger = [nível], nome da Apênder, ApênderName,…
Entre eles, o nível está a prioridade do registro, dividido em desligado, fatal, erros, aviso, informações, depuração, níveis todos ou personalizados. O Log4J recomenda o uso de apenas quatro níveis, com prioridade de alta a baixa, ou seja, erros, aviso, informações e depuração. Pelo nível definido aqui, você pode controlar os comutadores para o nível correspondente de informações de log no aplicativo. Por exemplo, se o nível de informação for definido aqui, todas as informações de log de nível de depuração no aplicativo não serão impressas. O nome do apêndice especifica para onde as informações do log são emitidas. Vários destinos de saída podem ser especificados simultaneamente.
2.4.2 Destino de saída Appender
O sistema de log Log4J permite que a saída de log em diferentes locais, como console (console), arquivos (arquivos), novos arquivos são gerados com base em dias ou tamanho do arquivo e enviados a outros locais na forma de fluxos, etc.
Configurar o Appender, sua sintaxe é expressa como:
log4j.appender.apndername = totalmente.qualified.name.of.appender.classlog4j.appender.appendername.option1 = value1… log4j.appender.appendername.option = valuen
"totalmente.qualified.name.of.appender.class" pode especificar um dos cinco destinos a seguir:
1) .org.apache.log4j.consoleppender (console)
2) .org.apache.log4j.FileAppender (arquivo)
3) .org.apache.log4j.dailyrollingFileAppender (Gere um arquivo de log todos os dias)
4) .org.apache.log4j.rollingFileAppender (um novo arquivo é gerado quando o tamanho do arquivo atinge o tamanho especificado)
5) .org.apache.log4j.writreppend (Envie informações de log no formato de fluxo para qualquer local especificado)
(1) .CONSOLEAPPENDE
(2). Opções do fileppender
(3)
Ou seja, o formato correspondente é o seguinte:
1) '.' AAAA-MM: mensalmente
2)
3) '.' AAAA-MM-DD: todos os dias
4) '.
5)
6)
4. RollingFilePpender Options
2.4.3 Formato (layout) Layout
Às vezes, quero formatar minha própria saída de log de acordo com minhas preferências. O Log4J pode anexar um layout atrás do Appender para concluir esta função.
Configurar o layout, sua sintaxe é expressa como:
log4j.appender.apndername.layout = totalmente.qualified.name.of.layout.classlog4j.appender.appendername.layout.option1 = value1… log4j.appender.appendername.layout.option = valuen
O layout fornece quatro estilos de saída de log, como segue:
(1) .org.apache.log4j.htmllayout (layout em forma de tabela html),
(2) .org.apache.log4j.patternlayout (o modo de layout pode ser especificado com flexibilidade),
(3) .org.apache.log4j.simplelayout (contém o nível e a sequência de informações das informações do log),
(4) .org.apache.log4j.ttcclayout (incluindo tempo de geração de log, thread, categoria, etc. Informações)
Opções de Htmllayout
LocationInfo = true: o valor padrão é falso, emitir o nome do arquivo java e o número da linha
Título = meu arquivo de aplicativo: o valor padrão é as mensagens de log4j de log4j.
2. Opções do PatternLayout
ConversionPattern =%m%n: especifica como formatar a mensagem especificada.
O que precisa ser explicado aqui é o significado de vários símbolos no formato de informação do log:
Os modificadores podem ser adicionados entre os caracteres % e padrão para controlar sua largura mínima, largura máxima e alinhamento de texto. como:
1)%20C: Especifique o nome da categoria de saída, a largura mínima é 20. Se o nome da categoria for menor que 20, será alinhado pela direita por padrão.
2)%-20C: Especifica o nome da categoria de saída, a largura mínima é 20. Se o nome da categoria for menor que 20, o sinal "-" especifica o alinhamento à esquerda.
3)%. 30C: Especifique o nome da categoria de saída. A largura máxima é 30. Se o nome da categoria for maior que 30, os caracteres extras à esquerda serão cortados, mas se forem inferiores a 30, não haverá espaços.
4)%20.30C: Se o nome da categoria for menor que 20, preencha o espaço e alinhe -o corretamente. Se seu nome tiver mais de 30 caracteres, corte os caracteres extras da esquerda.
2.5.LOG4J Exemplo de configuração
A simplicidade da configuração do LOG4J faz com que ela se espalhe por mais e mais aplicativos: os arquivos de configuração do log4J implementam um conjunto completo de funções, como saída para o console, arquivos, arquivos de reversão, envio de correio de log, saída para tabelas de log de banco de dados e tags personalizadas.
Log4j.rootlogger = Debug, Console, A1, IM log4j.addivity.org.apache = true
n Aplicar -se ao console
log4j.appender.console = org.apache.log4j.consoleppenderLog4j.appender.threshold = debug log4j.appender.console.target = system.outLog4j.appender.console.layout = org.apache.log4j.patternLayout log4j.appender.console.layout.conversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%n
n Aplicar em arquivos
log4j.appender.file = org.apache.log4j.FileAppenderLog4j.appender.file.file = file.loglog4j.appender.file.append = falselog4j.appender.file.layout = org.apache.log4j.patternlayoutlogLog4j.ApPender.file.layout = org.apache.log4j.patternlayoutlog %c - % -4r [ %t] %-5p %c %x - %m %n
n Aplicar na reversão do arquivo
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLING_FILE.Threshold=ERRORlog4j.appender.ROLLING_FILE.File=rolling.loglog4j.appender.ROLLING_FILE.Append=truelog4j.appender.Append=truelog4j.append ender.ROLLING_FILE.MaxFileSize=10KBlog4j.appender.ROLLING_FILE.MaxBackupIndex=1log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.ROLLING_FILE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m %n
n Aplicar ao soquete
log4j.appender.socket = org.apache.log4j.rollingFileAppenderLog4j.appender.socket.remoteHost = localhost log4j.appender.socket.port = 5001log4j.append.socket.Locationinfo = true log4j.appender.socket.layout = org.apache.log4j.patternlayoutLog4j.appender.socet.layout.conversionPattern = [start]%d {date} [date]%n%p [prioridade] n%x [ndc]%n%n%n%n thread [thread] n%n%n [prioridade] n%x [ndc] n [thread] n. log4j.appender.lf5_appender = org.apache.log4j.lf5.lf5appender log4j.appender.lf5_appender.maxnumberOfRecords = 2000n Enviar logs para e -mail
log4j.appender.mail = org.apache.log4j.net.smtpappenderLog4j.appender.mail.threshold = fatallog4j.appender.mail.buffersize = 10log4j.appender.mail.from=web@www.wuset.comlog4j.appender.mail.smtphost=www.wusetu.comlog4j.appender.mail.subject=log4j Mensagem log4j.appender.mail.to=web@www.wusetu.comlog4j.appender.mail.layout=org.apache.log4j.patternlayout log4j.append.mail.layout.conversionPattern = D-%c-%-4r%t]%-515101515151
n para banco de dados
log4j.appender.database = org.apache.log4j.jdbc.jdbcappenderLog4j.appender.database.url = jdbc: mysql: // localhost: 3306/testlog4j.append.database.driver = com.mysQL.JL.JL.JL.JD.JD.JDCB4J.Apnder.datriver.driver = com.mysql.jl.jd.jdcbase.datriver log4j.appender.database.user = rootlog4j.appender.database.password = log4j.append.database.sql = inserir em log4j (message) valores (' %d - %c - % -4r [ %t] %-5p %c %x - - %m %n ') log4j.append.database.layout = org.apache.log4j.patternlayout log4j.appender.database.layout.conversionPattern =%d-%c-%-4r [%t]%-5p%c%x-%m%nLog4j.appender.a1 = org.apache.log4j.dailyrollingFileApPender Log4j.Append.A1.File.Log4JingyRollingFileApPender Log4j.Anag.A1.FILE log4j.appender.a1.datepattern = yyyymmdd-hh'.log4j'log4j.appender.a1.layout = org.apache.log4j.xml.xmllayoutn Appender personalizado
log4j.appender.im = net.cybercorlin.util.logger.appender.iMappendLog4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.imername = nome de usuário log4j.apnder.im.mpassword = senha log4j.append.im.riM.Recient = [email protected]=org.apache.log4j.patternlayoutLog4j.appender.im.layout.conversionPattern = [estrutura] %d -c -4r [ %t] %-5p %c - - %M %n %n %n
3. Configure o log4j para a primavera no aplicativo da web
Primeiro, você precisa adicionar a seguinte instrução de configuração ao arquivo web.xml:
<!-Para evitar conflitos entre os projetos, defina um webApprootKey exclusivo-> <Context-Param> <amam-name> webApprootKey </amam-name> <amam-value> myProject.root </param-value> </context-paparm> <!-carregar o arquivo de configuração <Maver-Value> /web-inf/classes/config/log4j/log4j.properties </param-value> </xectlent-param> <!-Defina o intervalo de tempo para refrescar o arquivo de configuração de log4jrefration, definido para 60s aqui-> <Context-Param> <amam-name> log4jRefreningVal, </context-param> <!-Carregue o ouvinte Log4J no Spring Framework Log4jconfigListener-> <Ilvier> <Ilvier-class> org.springframework.web.util.log4jconfiglistener </lister-class> </sivener>
Recomenda-se definir o valor da propriedade Log4JConfigLocation como: /web-inf/classes/log4j.properties, para que, quando fizermos alguns testes, podemos registrar corretamente as informações de log quando não iniciarmos o aplicativo da Web. Log4JConfigListener é uma classe de ferramentas fornecida pela primavera. Ele abre um thread de monitoramento log4j e detecta a configuração de log alterações a cada 60 segundos (definição de variável Log4JRefShinterval), para que não haja necessidade de reiniciar o serviço da web sempre para aplicar a nova configuração. No Tomcat, nenhuma propriedade do sistema é separada com base em aplicativos da Web. Portanto, um "WebApprootKey" exclusivo deve ser definido para cada aplicativo da web e chamamos -o de webapp.root. Depois de iniciar o ambiente, o log4jconfigListener injetará o valor na variável webapp.root.
4. Use log4j no código
4.1. Pegue o gravador
Usando o log4j, a primeira etapa é obter um gravador de log, que será responsável pelo controle das informações do log.
public static mogger getLogger (nome da string)
Obtenha o Logger pelo nome especificado e, se necessário, crie um novo Logger para o nome. O nome é geralmente nomeado nesta classe, como:
Logger estático Logger = Logger.getLogger (ServerwithLog4j.class.getName ())
4.2. Leia o arquivo de configuração
Depois de obter o madeireiro, a segunda etapa configurará o ambiente LOG4J, com a sintaxe como:
Se você colocar log4j.properties no diretório raiz do projeto, também não poderá escrever esta frase e o programa encontrará automaticamente o arquivo de configuração.
BasicConfigurator.configure (): Use automaticamente e rapidamente o ambiente log4j padrão. PropertyConfigurator.Configure (String ConfigFileName): lê arquivos de configuração gravados usando os arquivos de recursos do Java.
Domconfigurator.configure (String FileName): Leia os arquivos de configuração no formulário XML.
O LOG4J é inicializado usando os 3 configuradores acima, e o uso do PropertyConfigurator é adequado para todos os sistemas. A seguinte declaração.
PropertyConfigurator.configure ("log4j.properties");Para o projeto Java General, o LOG4J pode ser inicializado sem usar a instrução acima. O LOG4J encontrará automaticamente o arquivo de configuração no ClassPath e inicialize. Se o LOG4J não puder inicializar automaticamente o arquivo de configuração, o método acima precisará ser inicializado.
Nota: Ao inicializar o arquivo de configuração, é melhor executá -lo apenas uma vez quando o sistema iniciar. Se ele o executar várias vezes, um é um desperdício de recursos, e o outro é que, para a versão antiga do log4j, pode ocorrer problemas ao usar o DailyrollingFileAppender.
4.3. Insira informações de registro (Informações de log de formato)
Quando as duas etapas necessárias anteriores forem concluídas, você pode inserir facilmente as instruções de registro de diferentes níveis de prioridade em qualquer lugar que deseja registrar. A sintaxe é a seguinte:
Logger.debug (mensagem de objeto);