1: Introdução à Introdução Log4J
Log4J é um projeto de código aberto do Apache. o formato de saída de cada log; O mais interessante é que eles podem ser configurados de maneira flexível através de um arquivo de configuração sem modificar o código do aplicativo.
Além disso, através de outras interfaces de idioma, você pode usar o log4j em programas C, C ++, .NET, PL/SQL. Componente. Além disso, usando várias extensões de terceiros, você pode integrar facilmente o LOG4J nos aplicativos J2EE, Jini e até SNMP.
2. Exemplos iniciantes
1. Crie um novo projeto Java, importe o pacote log4j-1.2.17.jar, e o diretório final de todo o projeto é o seguinte
2. Crie e defina log4j.properties no mesmo nível
### configurar###
log4j.rootlogger = Debug, stdout, d, e
### Informações de saída para controlar o elevador ####
log4j.appender.stdout = org.apache.log4j.consoleppender
log4j.appender.stdout.target = System.out
log4j.appender.stdout.layout = org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionPattern = [%-5p]%d {yyyy-mm-dd hh: mm: ss, sss} método:%l%n%m%n
### saída logs acima do nível de depuração para = e: //logs/error.log ###
log4j.appender.d = org.apache.log4j.dailyrollingFilePpender
log4j.appender.d.file = e: //logs/log.log
log4j.appender.d.append = true
log4j.appender.d.threshold = Debug
log4j.appender.d.layout = org.apache.log4j.patternlayout
log4j.appender.d.layout.conversionPattern = %-d {yyyy-mm-dd hh: mm: ss} [ %t: %r]-[ %p] %m %n
### saída logs acima do nível de erro para = e: //logs/error.log ###
log4j.appender.e = org.apache.log4j.dailyrollingFilePpender
log4j.appender.e.file = e: //logs/error.log
log4j.appender.e.append = true
log4j.appender.e.threshold = erro
log4j.appender.e.layout = org.apache.log4j.patternlayout
log4j.appender.e.layout.conversionPattern = %-d {yyyy-mm-dd hh: mm: ss} [ %t: %r]-[ %p] %m %n
3. Defina o conteúdo do log
pacote com.mucfc; importar org.apache.log4j.logger;/** *@Autor Linbingwen *@18 de maio de 2015 9:14:21 */public class Test {private static logger logg er = logger.getLogger (teste. classe); : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the : ::::::::::::::::::::::Here :::::::::::::::::::hee :::::::::::::::::heo the ::::::::::::::::::::::::::::: the Debug ("Esta é a mensagem de depuração."); mensagem de informação.4. Resultado da saída
(1) Primeiro de tudo, as informações do console
(2) Vejamos o arquivo de saída
O conteúdo é o seguinte, e verifica -se que ele foi emitido para o documento correspondente, conforme necessário.
3. Método de uso básico de log4j
O LOG4J consiste em três componentes importantes: 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. A prioridade das informações de log é de alta a baixa. arquivo; e a saída é o formato controla o conteúdo de exibição das informações de log.
2.1
De fato, você também não pode usar arquivos de configuração, mas configure o ambiente LOG4J em seu código. No entanto, o uso de arquivos de configuração tornará seu aplicativo mais flexível. O Log4J suporta dois formatos de arquivo de configuração, um é um arquivo de formato XML e o outro é um arquivo de recurso Java (key = value). Abaixo, apresentamos o método de usar arquivos de recurso Java como arquivos de configuração:
1. Configure o logger da raiz, sua sintaxe é:
log4j.rootlogger = [nível], nome da Apênder, ApênderName,…
Entre eles, o nível está a prioridade do registro, dividido em desativação, fatal, erro, aviso, informação, depuração, tudo ou o nível que você define. 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. Apênder nome refere -se a onde as informações do log B são emitidas. Você pode especificar vários destinos de saída ao mesmo tempo.
2. Configure o Appender de destino para produzir as informações do log e sua sintaxe é:
log4j.appender.apndername = totalmente.qualified.name.of.appender.class
log4j.appender.apndername.option1 = value1
...
log4j.appender.apndername.option = valuen
Entre eles, os apêndeiros fornecidos pelo LOG4J são os seguintes:
org.apache.log4j.consoleppender (console),
org.apache.log4j.fileppender (arquivo),
org.apache.log4j.dailyrollingFileAppender (gera um arquivo de log todos os dias),
org.apache.log4j.rollingFileAppender (um novo arquivo é gerado quando o tamanho do arquivo atinge o tamanho especificado),
org.apache.log4j.writreppend (envie informações de log no formato de fluxo para qualquer local especificado)
3. Configure o formato (layout) das informações do log, e sua sintaxe é:
log4j.appender.apndername.layout = totalmente.qualified.name.of.layout.class
log4j.appender.apndername.layout.option1 = value1
...
log4j.appender.apndername.layout.option = valuen
Entre eles, existem vários layouts fornecidos pelo LOG4J:
org.apache.log4j.htmllayout (layout em forma de tabela HTML),
org.apache.log4j.patternlayout (o modo de layout pode ser especificado com flexibilidade),
org.apache.log4j.simplelayout (contém o nível e a sequência de informações das informações do log),
org.apache.log4j.ttcclayout (incluindo tempo, thread, categoria etc. de geração de logs)
Log4J usa um formato de impressão semelhante à função Printf na linguagem C para formatar as informações do log, e os parâmetros de impressão são os seguintes: %m A mensagem especificada no código de saída
%p prioridade de saída, ou seja, depuração, informações, aviso, erro, fatal
%r saída O número de milissegundos retirados do início do aplicativo para produzir as informações do log
%C produz a categoria, geralmente o nome completo da classe em que está localizado
%t produz o nome do encadeamento que gera o evento de log
%n produz uma quebra de linha de retorno do carro, a plataforma do Windows é "rn", a plataforma Unix é "n"
%D Saídas A data ou hora do tempo de log. : 18 de outubro de 2002 22:10:28, 921
%L Saída O local onde o evento de log ocorre, incluindo o nome da classe, o thread que ocorreu e o número de linhas no código. Exemplo: testlog4.main (testlog4.java:10)
2.2.
1. Pegue o gravador
Usando o log4j, a primeira etapa é obter o registrador de log, que será responsável pelo controle das informações do log. A sintaxe é:
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 ())
2. Leia o arquivo de configuração
Depois de obter o madeireiro, a segunda etapa configurará o ambiente LOG4J, com a sintaxe como:
BasicConfigurator.configure (): Use automaticamente e rapidamente o ambiente log4j padrão.
PropertyConfigurator.Configure (String ConfigFileName): Leia os 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.
3. Insira informações de registro (informações de log de formato)
Quando as duas etapas necessárias anteriores são concluídas, você pode inserir facilmente as instruções de registro de diferentes níveis de prioridade em qualquer lugar que você deseja registrar.
Logger.debug (mensagem de objeto);
Logger.info (mensagem de objeto);
Logger.warn (mensagem de objeto);
Logger.error (mensagem de objeto);
2.3
Cada madeireiro é submetido a um nível de log (nível de log) para controlar a saída das informações do log. Os níveis de log são divididos em:
R: Fora do nível mais alto é usado para fechar todo o registro.
B: Fatal indica que cada evento de erro crítico fará com que o aplicativo saia.
C: O erro indica que, embora ocorra um evento de erro, ele ainda não afeta a operação contínua do sistema.
D: Warm indica que haverá possíveis situações de erro.
E: Informações geralmente e no nível de granulação grossa, enfatiza toda a operação do aplicativo.
F: A depuração geralmente é usada no nível de grão fino e é muito útil para depurar aplicativos.
G: Todo o nível mínimo, usado para abrir todo o registro.
Os níveis acima são definidos na classe org.apache.log4j.level. O Log4J recomenda apenas o uso de 4 níveis, com prioridade de alta a baixa, erro, aviso, informação e depuração. Usando o nível de log, você pode controlar a saída das informações do log no nível correspondente no aplicativo. Por exemplo, se B for usado, todas as informações de log abaixo do nível de informação (como Debug) no aplicativo não serão impressas.
4. Use Instâncias Log4J em Projetos da Web
O código acima descreve a aplicação simples do LOG4J e, de fato, o uso do LOG4J é tão simples e conveniente. Obviamente, além do método de configuração acima, há outras coisas, como fazer um aplicativo J2EE. em web.xml.
1. O uso do LOG4J de aplicativos da Web basicamente usa: Crie um novo servlet, que executa a configuração do log4j na função Init. Geralmente, é para ler o arquivo de configuração. Portanto, você precisa configurar este servlet no web.xml e definir o carregamento no startup como 1.
2. Este Log4J de configuração do servlet é ler o arquivo de configuração e ligar para a função de configuração. Há duas perguntas aqui: 1. Você precisa saber onde está o arquivo;
3. O local do arquivo de configuração pode ser configurado no Web.xml.
4. Geralmente, existem dois tipos de tipos de arquivo, um é o arquivo de propriedade Java e o outro é o arquivo XML
O conteúdo geral do arquivo de configuração: LOG4J pode especificar o nível mínimo do nível de log de saída, bem como o formato de configuração de saída do log.
(1) Crie um projeto da web, o diretório final de todo o projeto é o seguinte
(2) A configuração web.xml é a seguinte:
<? xml versão = "1.0" coding = "utf-8"?> <web-pp xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http: // java .sun.com/xml/ns/javaee "xsi: esquemalocation =" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee .xsd "id =" webApp_id "versão =" 3.0 "> <libe-name> loglearning </sisplay-name> <Verlet> <Verlet-name> log4jTestServlet </servlet-name> <Servlet-Cl Ass> com.mucfc . </servlet-class> <iit-param> <amam-name> log4j-properties-location </param-name> <amam-value> /web-inf/classes/log4j.properties </param-value> <// init -param> <adarg-on-startup> 1 </olload-on-startup> </servlet> <Servlet-mapping> <Vertlet-name> log4jtestservlet </servlet-name> <url-tattern>/teste </ url -pattern> </servlet-mapping> </web-app>
(3) arquivo de configuração log4j.properties
### Defina níveis de log ###
log4j.rootlogger = Debug, stdout, d, e
log4j.appender.stdout = org.apache.log4j.consoleppender
log4j.appender.stdout.target = System.out
log4j.appender.stdout.layout = org.apache.log4j.patternlayout
log4j.appender.stdout.layout.conversionPattern = [%-5p]%d {yyyy-mm-dd hh: mm: ss, sss} método:%l%n%m%n
log4j.appender.d = org.apache.log4j.dailyrollingFilePpender
log4j.appender.d.file = f: //logs/log.log
log4j.appender.d.append = true
log4j.appender.d.threshold = Debug
log4j.appender.d.layout = org.apache.log4j.patternlayout
log4j.appender.d.layout.conversionPattern = %-d {yyyy-mm-dd hh: mm: ss} [ %t: %r]-[ %p] %m %n
log4j.appender.e = org.apache.log4j.dailyrollingFilePpender
log4j.appender.e.file = f: //logs/error.log
log4j.appender.e.append = true
log4j.appender.e.threshold = erro
log4j.appender.e.layout = org.apache.log4j.patternlayout
log4j.appender.e.layout.conversionPattern = %-d {yyyy-mm-dd hh: mm: ss} [ %t: %r]-[ %p] %m %n
(4) O servlet inicializado assim que o contêiner da web vem
Log4jinitsVlet.javapacke com.mucfc; Importar javax.Servlet.http.httpServlet; * Classe de implementação do servlet log4jinitServlet */ @WebServlet ("/ log4jinitServlet") classe pública Log4jinitServlet estende httpServlet {private static long s eraalversionuid = 1l; ); "); String log4jLocation = config.getInitParameter (" log4j-properties-location "); servletContext sc = config.getServletContext (); if (log4jLocation == nul l) {System.err.println (" *** NO LOG4J- Arquivo de inicialização de propriedades-localização, portanto, use o BasicConfigurator para inicializar "); BasicConfigurator.configure ();} else {String webApppath = sc.getRealPath ("/"); string Log4jProp = New File (Log4 Log4J (LOG4Jloclocation; Arquivo YomamayApsHaMaMama = New File (LOG4J (LOG4J Log4J (arquivo de arquivo YomamayestHissayMama = New (LOG4J Log4J (Log4J (Log4J Log4J (arquivo de Log4j (filep4Jloclocation; arquivo yomamayAyPayPayPaMaMama = new File (LOG4J (LOG4J Log4J (FilePorning YomamayestHissaymaMama = novo (File 4 ); ** " + log4JProp +" O arquivo não foi encontrado, então inicializado com o BasicConfigurator "); BasicConfigurator.configure ();}} super.init (config);} /*** @see httpServlet#Doget (htttsleTreQuest Solicitação estro Resposta HttpServLetResponse) */ Void protegido Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {// tlo-generated métod stub}/ ** *@see httpservle t #toPost (hTPSERTRELE DoPost (solicitação httpServletRequest, resposta httpServletResponse) lançar servletexception, ioexception {// TODO Auto-Gerated Method Stub}}Log Log4jTestServlet, Java
pacote com.mucfc; Http .httpServletRequest; serialversionuid = 1L; * * * @see servlet#init (servletconfig) */ public void init (servletConfig config) lança servletexception {// tolo de método de auto-gerado}/ ** * @ consulte httpServlet#Doget (httpSertTerequest, solicitação, htttletReposição Void protegido Doget (Solicitação HttpServletRequest, Resposta HttpServletResponse) lança servleTexception, ioexception {// grava o nível de depuração Logger.debug ("Isso é depuração de depuração."); mensagem. "); // Registre o nível de erro Informações Logger.error (" Esta é a mensagem de erro. ");} / ** * @see httpServlet#doPost (solicitação httpServletRequest, httpServletResponse) * / Proteged DoPost (httpSleTreQuest Soldem, Solicitação, Resposta HttpServLetResponse) lança servleTexception, ioexception {Doget (solicitação, resposta);Em seguida está em funcionamento, vamos ver os resultados:
Resultado da saída:
5. Use Log4J na primavera
Aqui precisamos implementar o uso de primavera em projetos da web para usar o log4j
(1) Conecte -se ao projeto acima e importe o pacote de mola
(2) web.xml adicionado
<!-Definir diretório raiz-> <Context-Param> <amam-name> webAppRootKey </amam-name> <amam-value> webapp.root </amam-value> </xectemp-param> <Context- param> <amam-name> log4jconfigLocation </param-name> <amam-value> /web-inf/classes/log4j.properties </param-value> </context-param> <!-3000 significa um watchdog de abertura O thread varre o arquivo de configuração a cada 60 segundos; > </context-param> <Ilvier> <lister-class> org.springframework.web.util.log4jconfiglistener </lister-class> </sivener>
Todo o conteúdo é o seguinte:
<? xml versão = "1.0" coding = "utf-8"?> <web-pp xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http: // java .sun.com/xml/ns/javaee "xsi: esquemalocation =" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee .xsd "id =" webApp_id "versão =" 3.0 "> <libe-name> loglearning </sisplay-name> <Verlet> <Verlet-name> log4jTestServlet </servlet-name> <Servlet-Cl Ass> com.mucfc . mucfc.log4jinitServlet </servlet-class> <iti init-param> <amam-name> log4j-properties-location </amam-name> <amam-value> /web-inf/classes/log4j.p roperties </param- Valor> </irit-param> <adarble-on-startup> 1 </load-on-startup> </vlett>-> <Servlet-Mapping> <Verlet-name> log4jtestservlet </servlet-name> <url -Padrão>/teste </url-tattern> </servlet-mapping> <!-Spring Container Carreging-> <Ilvier> <lister-class> org.springframework.web.context.contextloaderListener </list Ener-Class > </ouvinte> <xcent-param> <amam-name> contextConfigLocation </param-name> <amam-value> classPath: ApplicationContext.xml </param-value> </context-par am> <!-set ROOT DIRETORY--> <Context-Param> <amam-name> webApAprootKey </amam-name> <amam-value> webapp.root </amam-value> </xectlent-Param> <Context-Param> <param- Nome> log4jconfigLocation </amam-name> <amam-value> /web-inf/classes/log4j.properties </amam-value> </context-param> <!-3000 significa abrir um thread Watchdog para digitalizar a configuração Arquivo a cada 60 segundos muda; Param> <Ilvier> <lister-class> org.springframework.web.util.log4jconfiglistener </lister-class> </lister> </web-app>
Aqui Log4jinitServlet.java é equivalente a ser inútil.
(2) ApplicationContext.xml
Sem conteúdo:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org /2001/xmlschema-Instance "xmlns: context =" http://www.springframework.org/schema/Context "xmlns: aop =" http://www.springframework.org/sche/scoc scop " "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-.2.xsdhttp://www.springframework.org . springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/cont ext/spring-context-3.2.xsd "> </ Beans>
(3) Dessa forma, o tronco será iniciado com a janela da mola
Depois que o programa for executado, o log será impresso automaticamente
log.log
Error.log está vazio porque apenas imprime as informações acima do nível de erro
Digite http: // localhost: 8080/LogLearning2/teste pelo navegador
Em seguida, abra o arquivo
O tutorial detalhado sobre o Java Log4J está aqui.