Este artigo apresenta principalmente a configuração do Slf4J+Logback na Java Engineering.
Antes de apresentar a configuração de logback SLF4J+, primeiro apresente o logback de logback do componente log.
(1) A introdução e configuração do componente de log Logback
1. Introdução ao logback
Logback é outro componente de log de código aberto projetado pelo fundador do LOG4J. Atualmente, o Logback está dividido em três módulos: Logback-Core, Logback-Classic e Logback-Activity. Logback-Core é o módulo básico dos outros dois módulos. Logback-Classic é uma versão aprimorada do log4j. Além disso, o Logback-Classic implementa totalmente a API SLF4J para que você possa substituí-lo facilmente por outros sistemas de registro, como o log4j ou o log JDK14. O módulo de acesso de acesso de logback se integra aos contêineres do servlet para fornecer a função de acessar logs através do HTTP. Logback é o site oficial que combina dois componentes com o SLF4J da seguinte maneira:
Site oficial de Logback: http://logback.qos.ch
Site oficial do SLF4J: http://www.slf4j.org
Os componentes usados neste artigo são os seguintes: Vá para o site oficial para baixar!
Logback -access -.0.0.jar
Logback -Classic -.0.0.jar
Logback-core-1.0.0.jar
Slf4j-api-1.6.0.jar
2. Razões para o logback substituir o log4j:
Logback e Log4J são muito semelhantes. Aqui estão algumas vantagens de logback sobre o log4j:
1. Implemente mais rápido a reescrita do kernel da logback e o desempenho aumenta mais de 10 vezes em alguns caminhos de execução importantes. Além disso, o logback não apenas melhora o desempenho, mas também possui menos cargas de memória inicializadas.
2. Logback de teste muito completo foi testado por alguns anos, inúmeras horas. O teste de Logback é completamente diferente. Do ponto de vista do autor, esse é um motivo simples e importante para escolher o logback em vez do log4j.
3. O clássico de logback é naturalmente implementado com o SLF4J Logback-Classic para obter SLF4J. No uso do SLF4J, você não pode se sentir clássico de logback. Além disso, como o Logback-Classic implementa muito o SLF4J, a mudança para o LOG4J ou outro é muito fácil.
4. O site oficial do documento muito completo possui mais de 200 páginas de documentos.
5. Recarregue automaticamente o arquivo de configuração como uma modificação do arquivo de configuração, o clássico de logback pode recarregar automaticamente o arquivo de configuração. O processo de varredura é rápido e seguro, não precisa criar outro thread de varredura. Essa tecnologia garante plenamente que o aplicativo possa ser executado no ambiente JEE.
6. Lilith Lilith é um observador do incidente de log, semelhante à serra elétrica do log4j. Lilith também pode processar grandes quantidades de dados de log.
7. Modo de cautela e recuperação muito amigável no modo de cautela, várias instâncias de FilePpender são executadas sob vários JVMs e podem escrever com segurança o mesmo arquivo de log. O RollingFileAppender terá algumas limitações. O FilePpender da Logback e suas subclasses, incluindo o RollingFilePpender, podem se recuperar de exceções de E/S muito amigáveis.
8. Os arquivos de configuração podem lidar com diferentes situações. Esses arquivos de configuração são apenas pequenas diferenças, que podem ser implementadas e implementadas, para que um arquivo de configuração possa se adaptar a vários ambientes.
9. Filtros (filtros) Às vezes, é necessário um problema e um log é necessário. No log4j, reduzindo apenas o nível de log, mas isso fará muitos logs e afetará o desempenho do aplicativo. No Logback, você pode continuar mantendo esse nível de log e remover alguns casos especiais. Para conseguir essa função, você só precisa adicionar 4 linhas de configuração XML. Você pode se referir ao MDCFilter.
10. SifttingApne (um appender muito multi -funcional), pode ser usado para dividir o arquivo de log de acordo com qualquer parâmetros operacionais. Por exemplo, o SiftingAppender pode distinguir a sessão do usuário que segue a sessão do usuário e, em seguida, cada usuário terá um arquivo de log.
11. Compactar automaticamente o log ROLLINGFILEAPENDE que foi atingido. A compactação é um processo assíncrono; portanto, mesmo para grandes arquivos de log, os aplicativos não serão afetados no processo de compactação.
12. A árvore da pilha possui uma versão do pacote de logback.
13. Remova automaticamente o arquivo de log antigo, configurando a propriedade Maxhistory do TimeBasedRollingPolicy ou SizeAndTimeBasedFnatp. Se o MaxHistory 12 estiver definido, esses arquivos de log que foram mais de 12 meses serão removidos automaticamente.
Em resumo, o logback é melhor que o LOG4J.
3. Introdução à configuração do logback
1. Logger, Appender e Layout
O Logger, como gravador do log, associa -o ao contexto correspondente usado, é usado principalmente para armazenar objetos de log.
O Appender é usado principalmente para especificar o destino da saída de log.
O layout é responsável pela saída do evento em uma string, informações de log formatadas.
2. Contexto do logger
Cada logger está associado a um LoggerContext. Todo o outro logger também foi obtido através do método estático da classe Org.slf4j.loggerFactory GetLogger. O método getLogger é nomeado pelo Logger. Use o mesmo nome para chamar o método LoggerFactory.getLogger.
3. Herança de níveis e níveis efetivos
O Logger pode ser atribuído. Os níveis incluem: rastreio, depuração, informações, aviso e erro, definidos no ch.qos.logback.classic.level Class. Se o madeireiro não for atribuído, ele herdará o nível do ancestral mais próximo do nível de distribuição. O nível padrão do Root Logger é depuração.
4. Método de impressão e regras de seleção básica <Br /> métodos de impressão determinam o nível da solicitação. Por exemplo, se L é uma instância de logger, a instrução L.Info ("..") é uma declaração de registro com uma informação de nível. O nível de uma solicitação de log é chamado ativado quando é maior ou igual ao nível válido de seu madeireiro, caso contrário, será chamado de desativado. O nível de solicitação de registro é P e o nível válido do Logger é q.
Esta regra está no coração do logback. A classificação de nível é: Trace <Debug <Info <Warn <Erro
4. Configuração padrão do Logback <Br /> Se os arquivos de configuração Logback-Test.xml e Logback.xml não existirem, o logback chamará o BasicConfigurator por padrão para criar uma configuração minimizada. Para minimizar a configuração que consiste em um consoleiro associado a um registrador de raiz. O modo de saída é %d {hh: mm: ss.ss} [ %thread] %-5level %logger {36} - %msg %n padringLayoutendCoder. O nível padrão do Root Logger é depuração.
1. O arquivo de configuração do logback
A sintaxe do arquivo de configuração de logback é muito flexível. Devido à flexibilidade, o esquema DTD ou XML não pode ser definido. No entanto, você pode descrever a estrutura básica do arquivo de configuração dessa maneira: comece com <figuration>, existem zero ou mais elementos <ppender>, zero ou mais elementos <Gerger> e um máximo de elementos <sict>.
2. As etapas da configuração padrão do logback
(1).
(2).
(3).
3. Arquivo logback.xml
<? Appender Name = "stdout"> <!-Encoding de saída de log-> <codinging> utf-8 </coding> <aayout> <!-Formato Saída:%D significa data,%Thread indica o nome do thread,%-5LEvel: Largura do caractere de nível 5 do display esquerdo 5 Largura do caractere MSG: Mensagem de log,%n é um símbolo de mudança 5LEvel %Logger {50}- %msg %n </storking> </sayout> </pepnder> <!-Gere os arquivos de log diários-> <ppender name = "file"> <Coding> utf-8 </ Encoding> <RollingPolicy> <!-O nome do arquivo em saída pelo arquivo de log-> <filenamepattern> $ {log_home} /myapp.log.%d {yyyy-mm-dd}. /maxhistory> </rollingpolice> <layout> <!-Saída formulada:%d representa a data,%Thread representa o nome do thread,%d representa o nome do thread,%-5level: 5 caracteres Largura exibida a partir da esquerda%msg: Mensagem de log,%n é um caractere de alteração-> <dattern>%d {yyyy-mm-dd hh: mm: ss.ss} [%thread]%-5level%logger {50}-%msg%n </padrão > </Layout> <!-O maior tamanho do arquivo de log-> <griggeringpolice> <saxfilesize> 10MB </maxfilesize> </griggeringpolice> </appen der> <!-Mostrar parâmetros para o SQL de hibernato dedicado à personalização do hibernato -> <Nome do Logger = "Organate.type.descriptor.sql.basicbinder =" Trace " /> <Logger =" org.hibernate. org.hibernate.sql "nível =" def " /> <log. ERAMETERS" NEVEL = "DEBUG" /> <NOME LOGGER = "org.hibernate.engine.qury.hqlqueryPlan" nível = "Debug" /> <!- LOP SATILHE Nível-> <root nível = "info"> <ppender-ref = "stdout" /> <ppender-ref ref = "arquivo" /> < /root> <!-logs no banco de dados-> <nome do ppender = "DB"> <! DatabaseName </url> <suser> root </suser> <fassword> root </dasting> </datasource> </conextionource> </pappender> -> </figuration> </figuration> </figuration>> </figuration>> 5. Use o logback de referência no programa
pacote com.stu.system.action; classe);
Em seguida, vamos apresentar a configuração do Slf4J+Logback no projeto Java.
1. Slf4j baseado em Maven.
<Depencency> <PuerpId> org.slf4j </groupiD> <TRAFACTID> SLF4J-API </ArtifactId> <versão> 1.7.10 </versão> </dependency> <puperid> C H.Qos.Logback </Groupid> <stifactId> Logback-Classic </sutifactId> <Versão> 1.1.2 </siSTEM> </Deendecy> <g.qos. /versão> </dependency>
2. Crie um novo arquivo de configuração Logback.xml no diretório ClassPath
<? xml versão = "1.0" coding = "utf-8"?> <!-Scan: Quando esta propriedade estiver definida como true, se o arquivo de configuração mudar, será recarregado e o valor padrão for verdadeiro. ScanPeriod: Define o intervalo de tempo para monitorar se há uma modificação do arquivo de configuração. O intervalo de tempo padrão é de 1 minuto. Debug: Quando esse atributo é definido como true, as informações de log de logback serão impressas para verificar o status de execução do logback em tempo real. O valor padrão é falso. -> <Configuration scan = "false" scanPeriod = "60 segundos" debug = "false"> <!-Defina o diretório raiz do log-> <propriedade name = "log_home" " /> <!-Defina o nome do arquivo de log-> <propriedade name =" AppName "value =" netty "> < / propriedade> <!-ch.qos.logback.core.consoleppender indica saída do console-> <Appender name = "stdout"> <Coding> utf-8 </coding> <!-Formato de saída de log:%d significa data,%thread indica o nome do thread,%-5LEVEL: Lidera do caractere de 5 caracteres da esquerda% %%%%%% Lo% 5 Largura do caractere %%%%iável Logger {50} significa que o nome do Logger é de 50 caracteres, caso contrário, será dividido de acordo com o período. %msg: mensagem de log, %n é uma mudança de linhas-> <layout> <dattern> %d {yyyy-mm-dd hh: mm: ss.ss} [ %thread] %-5level %logger {50}- % msg% n </storking> </sayout> </ppender> <!- role para gravar o arquivo, primeiro grave o log no arquivo especificado e, quando uma determinada condição for atendida, grave o log em outros arquivos- -> <Appender name = "AppGappende"> <Coding> utf-8 </coding> <!-o nome do arquivo de log designado-> <File> $ {Log_home}/$ {AppName} .Log </file> Em! -> <RollingPolicy> <!-O local de armazenamento e o nome do arquivo do arquivo gerado durante o rolamento%d {yyyy-mm-dd}: roll rolam dia a dia. AppName}-%d {yyyy-mm-dd}-%i.log </filenamepattern> <!-Nó opcional, controle o arquivo de arquivo reservado o maior se a quantidade exceder a quantidade, excluir o arquivo antigo. Supondo que seja enrolado todos os dias e a MaxHistory seja 365, apenas o último arquivo de 365 dias foi salvo para excluir o arquivo antigo antes. Observe que os arquivos antigos são excluídos e os diretórios criados para arquivos também serão excluídos. -> <Taxhistory> 365 </sAxhistory> <!-O tamanho do arquivo de log excede o maxfilesize, e o arquivo de log rolando de acordo com o%que mencionei acima, preste atenção ao time-hamingbasedtriggerpolicy. TimeBasedFilenamingAndTriggeringPolicy> <Axfilesize> 100MB </maxfilesize> </timebasedfilenamingan dtriggeringpolicy> </rollingpolicy> <!-Formato de saída de log:%D Representa a data da data, de thread indica o nome do thread, o número do thread, 5Level. A display esquerda de 5) largura de caracteres%Logger {50} indica que o nome do logger é de 50 caracteres, caso contrário, será dividido de acordo com o período. %MSG: Mensagem de log, %n é uma mudança de linhas-> <Aayout> <dattern> %d {yyyy-mm-dd hh: mm: ss.ss} [ %thread]-[ %-5level] [ %logger {50}: %linha]- %msg %n </storking> </layout> </pepnder> <!- Logger é usado principalmente para armazenar objetos de log. A primeira metade do nível do pacote: o nível de log a ser gravado, incluindo Trace <Debug <Info <Warn <Adição de erro: a função é se o Logger Children usa o Appender configurado pelo RootLogger para saída, false: significa que apenas O Appender do Logger atual é usado -Ref, True: O Appender-Ref e RootLogger do atual logger-ref e RootLogger-Refs são eficazes-> <!-Hibernate Logger-> <Nome Logger = "Org.hibernate" = Erro " /> <! "Level =" info "additivity =" true "> <ppender-ref ref =" ApploGappender " /> < /Logger> <!-Root e Logger é a relação entre pai e filho. Se não houver uma definição especial, é Padrão. -> <root nível = "info"> <ppender-ref = "stdout" /> <ppender-ref = "applaGappender" /> </rag> </figuration>