Composição do componente Log4j
Log4j consiste em três componentes importantes:
1. Prioridade das informações de log (Logger)
2. O destino de saída das informações de log (Appender)
3. Formato de saída (Layout) das informações de log.
resumo:
As prioridades das informações de log de alta para baixa incluem ERROR, WARN, INFO e DEBUG, que são usadas para especificar a importância dessas informações de log, respectivamente;
O destino de saída das informações de log especifica se o log será impresso no console ou em um arquivo;
O formato de saída controla o conteúdo de exibição das informações de log.
Introdução ao Log4j
Log4j é um projeto de código aberto do Apache. Ao usar Log4j, podemos controlar o destino da transmissão de informações de log para consoles, arquivos, componentes GUI e até mesmo servidores de soquete, gravadores de eventos NT, daemons Syslog UNIX, etc.; o formato de saída de cada log Ao definir o nível de cada informação de log, podemos controlar o processo de geração de log com mais detalhes. log4j-- log para java (log java).
Endereço de download do Log4j: http://logging.apache.org/log4j/2.x/download.html
Formato do arquivo de configuração Log4j
Log4j oferece suporte a dois formatos de arquivo de configuração:
1. Arquivos em formato XML
2. Arquivos em formato de propriedades
Você também não pode usar o arquivo de configuração, mas sim configurar o ambiente Log4j no código. No entanto, o uso de arquivos de configuração tornará seu aplicativo mais flexível.
Arquivo de configuração de definição Log4j
1. Configure o Logger raiz
Sua sintaxe é:
Descrição do parâmetro:
level é a prioridade do log, que é dividida em OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL ou o nível que você definir.
Off: o nível mais alto, usado para desligar todos os registros
Fatal: Indica que cada evento de erro fatal fará com que o aplicativo seja encerrado.
Erro: indica que embora ocorra um evento de erro, ele ainda não afeta a operação contínua do sistema.
Avisar: Indica que uma possível situação de erro ocorrerá
Informações: Geralmente usado em nível de granulação grossa, enfatizando todo o processo de execução do aplicativo
Depuração: Geralmente e em um nível granular grosso, enfatizando todo o processo de execução do aplicativo.
Todos: O nível mais baixo, usado para ativar todos os registros.
Log4j recomenda usar apenas quatro níveis. As prioridades de cima para baixo são ERROR, WARN, INFO e DEBUG. Através dos níveis aqui definidos, é possível controlar a ativação e desativação do nível correspondente de informações de log na aplicação.
appenderName refere-se a onde as informações de log são geradas e vários destinos de saída podem ser especificados ao mesmo tempo.
2. Configure o Appender de destino de saída de informações de log
Sua sintaxe é:
log4j.appender.appenderName.option1 = valor1
...
log4j.appender.appenderName.option = valorN
org.apache.log4j.ConsoleAppender(Console)
org.apache.log4j.FileAppender(Arquivo)
org.apache.log4j.DailyRollingFileAppender (gera um arquivo de log todos os dias)
org.apache.log4j.RollingFileAppender (gera um novo arquivo quando o tamanho do arquivo atinge o tamanho especificado)
org.apache.log4j.WriterAppender (envia informações de log em formato de streaming para qualquer local especificado)
3. Configure o formato das informações de log
A sintaxe é:
log4j.appender.appenderName.layout.option1 = valor1…
log4j.appender.appenderName.layout.option = valorN
org.apache.log4j.HTMLLayout (layout em formato de tabela HTML),
org.apache.log4j.PatternLayout (pode especificar padrões de layout com flexibilidade),
org.apache.log4j.SimpleLayout (contém o nível e a sequência de informações das informações de log),
org.apache.log4j.TTCCLayout (contém informações sobre tempo de geração de log, thread, categoria, etc.)
Log4J usa um formato de impressão semelhante à função printf em linguagem C para formatar as informações de log.
%mExibe a mensagem especificada no código
%p prioridade de saída, nomeadamente DEBUG, INFO, WARN, ERROR, FATAL
%r exibe o número de milissegundos necessários desde o início do aplicativo até a saída das informações de log.
%c exibe a categoria à qual pertence, geralmente o nome completo da classe.
%tExibe o nome do thread que gerou o evento de log
%n gera um caractere de retorno de carro e alimentação de linha, que é "rn" na plataforma Windows e "n" na plataforma Unix.
%d gera a data ou hora do ponto de registro. O formato padrão é ISO8601. Você também pode especificar o formato posteriormente, como: %d{yyyMMMddHH:mm:ss,SSS}. 2002 22:10:28.921
%l Exibe o local onde ocorreu o evento de log, incluindo o nome da categoria, o thread onde ocorreu e o número da linha no código. Exemplo: Testlog4.main(TestLog4.java:10)
%x: gera o NDC (ambiente de diagnóstico aninhado) associado ao thread atual, especialmente usado em aplicativos multiclientes e multithread como javaservlets.
%%: Gera um caractere "%" %F: Gera o nome do arquivo onde a mensagem de log é gerada
%L: Número da linha no código de saída
%m: gera a mensagem especificada no código e as informações de log específicas geradas
%n: gera um caractere de retorno de carro e avanço de linha, que é "/r/n" na plataforma Windows e "/n" na plataforma Unix. Ao gerar informações de log, você pode adicionar modificadores entre % e o caractere de modo. controlar sua largura mínima e largura máxima e alinhamento do 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, ela será alinhada à direita por padrão.
2)%-20c: Especifique 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 for menor que 30, serão cortados. não haja espaços.
4)%20.30c: Se o nome da categoria tiver menos de 20 caracteres, preencha espaços e justifique à direita. Se o nome tiver mais de 30 caracteres, trunque os caracteres do lado esquerdo.
Método de configuração de log4j.xml
<?xml versão="1.0" codificação="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuração xmlns:log4j="http://jakarta.apache.org/log4j/">
<nome do appender = "appender1"
>
<param name="Arquivo" value="logfile08.html" />
<param name="MaxFileSize" valor="1MB" />
<param name="MaxBackupIndex" valor="5" />
<layout>
</layout>
</appender>
<raiz>
<nível valor="depurar" />
<appender-refref="appender1" />
</raiz>
</log4j:configuração>
Antes de usar Log4j no programa, primeiro importe commons-logging.jar e logging-log4j-1.2.9.jar para o caminho de classe e coloque log4j.properties no diretório raiz src. Para usar log4j em uma classe, primeiro declare uma variável estática Loggerlogger=Logger.getLog("classname").
O uso é o seguinte: logger.debug("debugmessage") ou logger.info("infomessage").
1. Obtenha o registrador
Utilizando o Log4j, o primeiro passo é obter um logger, que será responsável por controlar as informações do log.
Sua sintaxe é:
publicstaticLoggergetLogger(Stringname)
Obtém o criador de logs pelo nome especificado e, se necessário, cria um novo criador de logs para esse nome. O nome geralmente leva o nome desta classe, como:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Leia o arquivo de configuração
Após obter o logger, o segundo passo é configurar o ambiente Log4j. A sintaxe é:
BasicConfigurator.configure(): Use de forma automática e rápida o ambiente Log4j padrão.
PropertyConfigurator.configure(StringconfigFilename): Leia o arquivo de configuração escrito usando o arquivo de propriedades Java.
DOMConfigurator.configure(Stringfilename): Leia o arquivo de configuração em formato XML.
3. Insira informações de registro (informações de registro formatadas)
Quando as duas etapas necessárias acima forem concluídas, você poderá facilmente usar instruções de log com prioridades diferentes para inserir em qualquer lugar onde deseja registrar.
Logger.debug(Objectmessage);
Logger.info(objetomensagem);
Logger.warn(objetomensagem);
Logger.error(objetomensagem);
Demonstração do programa
1. Use um programa para gerar informações de log
importar java.io.IOException;
importar org.apache.commons.logging.impl.Log4JLogger;
importar org.apache.log4j.BasicConfigurator;
importar org.apache.log4j.FileAppender;
importar org.apache.log4j.Layout;
importar org.apache.log4j.Level;
importar org.apache.log4j.Logger;
importar org.apache.log4j.SimpleLayout;
/**
*
* @versão: 1.1
*
* @autor: Su Ruonian<a href="mailto:[email protected]">Enviar e-mail</a>
*
* @desde: 1.0 Tempo de criação: 2013-1-1 15:19:42
*
* @function: Gera o log através do código
*
*/
classe pública Log4jPrintByCode {
Logger estático privado logger = Logger.getLogger (Log4jPrintByCode.class);
layout de layout privado = new SimpleLayout();
fileAppender privado fileAppender;
//Use dependências de construção e inicialize ao criar objetos
public Log4jPrintByCode(Layout layout, Level level,String distDir){
BasicConfigurator.configure(); //Use informações de configuração padrão, não há necessidade de escrever log4j.properties
tentar {
init(layout,nível,distDir);
} catch (Exceção e) {
e.printStackTrace();
}
}
public void init(Layout layout, Level level,String distDir) lança Exception{
logger.setLevel(level); //Definir o nível de saída do log
fileAppender = novo FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); //Adiciona terminal de saída
}
public static void main(String[] args) {
Layout SimpleLayout = new SimpleLayout();
String logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = novo Log4jPrintByCode(layout,Level.INFO,logDir);
//As seguintes informações serão exibidas
log4jCode.logger.info("informações de log impressas por log4j");
log4jCode.logger.warn("log aviso impresso por log4j");
log4jCode.logger.error("erro de log impresso por log4j");
}
layout público getLayout() {
layout de retorno;
}
public void setLayout(Layout) {
este.layout = layout;
}
public FileAppender getFileAppender() {
retornar arquivoAppender;
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = arquivoAppender;
}
}
// Registra informações de nível de informação
if (logger.isInfoEnabled()) {
logger.info("Esta é uma mensagem informativa do Dao.");
}
2.Log4J envia as mesmas informações de log para vários destinos
/* Alternar banco de dados */
usardb_log4j;
/* Tabela de informações de log */
criar tabela tb_log(
logId int não nulo comentário de incremento automático 'número de série',
createDate varchar(45) comentário nulo padrão 'Tempo de geração de log',
thread varchar (45) comentário nulo padrão 'thread atual',
nível varchar (45) comentário nulo padrão 'Nível de log atual',
class varchar(45) comentário nulo padrão 'Gerar classe de log',
mensagem varchar(245) comentário nulo padrão 'Registrar informações específicas',
chave primária (logId)
);
A instância do aplicativo envia informações de log para o console, arquivo e banco de dados ao mesmo tempo.
Criar banco de dados e tabelas
/* Alternar banco de dados */
usardb_log4j;
/* Tabela de informações de log */
criar tabela tb_log(
logId int não nulo comentário de incremento automático 'número de série',
createDate varchar(45) comentário nulo padrão 'Tempo de geração de log',
thread varchar (45) comentário nulo padrão 'thread atual',
nível varchar (45) comentário nulo padrão 'Nível de log atual',
class varchar(45) comentário nulo padrão 'Gerar classe de log',
mensagem varchar(245) comentário nulo padrão 'Registrar informações específicas',
chave primária (logId)
);
#Define a saída A1 para o controlador
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Defina o modo de layout de A1 como PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Defina o formato de saída de A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Define a saída A2 para arquivo
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Define para qual arquivo A2 será enviado
log4j.appender.A2.File=./log/sysLog.log
#Defina o comprimento máximo do arquivo de saída A2
log4j.appender.A2.MaxFileSize = 1 KB
#Defina o número de arquivos de backup para A2
log4j.appender.A2.MaxBackupIndex = 3
#Defina o modo de layout do A2 como PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Defina o modo de saída de A2
log4j.appender.A2.layout.ConversionPattern=%d{aaaa-MM-dd hh:mm:ss}:%p %t %c - %m%n
#Define a saída A3 para o banco de dados
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#Defina o layout do A3 e as instruções SQL executadas
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERIR EM tb_log(createDate,thread,level,class,message) valores('%d','%t','%-5p','%c','%m ')
importar org.apache.log4j.Logger;
importar org.apache.log4j.PropertyConfigurator;
/**
*
* @versão: 1.1
*
* @autor: Su Ruonian<a href="mailto:[email protected]">Enviar e-mail</a>
*
* @desde: 1.0 Tempo de criação: 1/1/2013 16:13:59
*
* @function: Controla a saída de informações de log para vários destinos através de arquivos de configuração
*
*/
classe pública Log4jPrintByConfigure {
Logger estático privado logger = Logger.getLogger (Log4jPrintByConfigure.class);
public static void main(String[] args) lança exceção {
//Carrega o arquivo de configuração de log log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//O arquivo é armazenado na pasta configure no mesmo diretório que src
//Se colocado em src, os parâmetros devem ser "bin/log4j.properties" ou "src/log4j.properties". Recomenda-se usar bin como padrão.
//As seguintes informações serão impressas
logger.debug("logger imprimir mensagem DEBUG");
logger.info("logger imprimir mensagem INFO");
logger.warn("logger imprimir mensagem de AVISO");
logger.error("mensagem de ERRO de impressão do registrador");
logger.fatal("Aqui está a mensagem FATAL");
}
}