`

<转>LogBack简易教程

 
阅读更多

 

LogBack简易教程

http://www.cnblogs.com/mailingfeng/p/3499436.html

1.简介

  LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的)

1.1 LogBack,Slf4j,Log4j之间的关系

  Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog...);

  LogBack和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。详细数据可参照下面地址:Reasons to prefer logback over log4j

  LogBack官方建议配合Slf4j使用,这样可以灵活地替换底层日志框架。

  (note: 为了优化log4j,以及更大性能的提升,Apache基金会已经着手开发了log4j 2.0, 其中也借鉴和吸收了logback的一些先进特性,目前log4j2还处于beta阶段)

1.2 LogBack的结构

  LogBack被分为3个组件,logback-core, logback-classic 和 logback-access.

  其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。

  logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath.

  logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口;

 

2. Slf4j+Logback的快速实践

2.1 资源准备

  现在常用的是将slf4j+Logback进行配套使用,所以需要将slf4j-api.jar, logback-core.jar, log-classic.jar加入classpath.

  之后编写logback.xml配置文件,同样该文件要加入classpath中,这样LogBack启动的时候会自动扫描到并加载。

  (note: 若LogBack无法检索到相关的配置文件,则会启用默认配置,将日志按照默认格式输出于控制台)

2.2 logback.xml配置

  LogBack的配置大概包括3部分,Appender,Logger,Root的配置。

      basic Syntax

 

 

  下面通过一个配置文件的示例来快速了解logback的配置:

复制代码
<?xml version="1.0" encoding="UTF-8"?>

<configuration debug="true" scan="true" scanPeriod="30 seconds"> 

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
        
        <!-- 常用的Pattern变量,大家可打开该pattern进行输出观察 -->
        <!-- 
          <pattern>
              %d{yyyy-MM-dd HH:mm:ss} [%level] - %msg%n
              Logger: %logger
              Class: %class
              File: %file
              Caller: %caller
              Line: %line
              Message: %m
              Method: %M
              Relative: %relative
              Thread: %thread
              Exception: %ex
              xException: %xEx
              nopException: %nopex
              rException: %rEx
              Marker: %marker
              %n
              
          </pattern>
           -->
    </encoder>
  </appender>
  
  <!-- 按日期区分的滚动日志 -->
  <appender name="ERROR-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>logs/error.log</file>
      
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
      
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
      
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>error.%d{yyyy-MM-dd}.log.zip</fileNamePattern>

      <!-- keep 30 days' worth of history -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>
  
  <!-- 按文件大小区分的滚动日志 -->
  <appender name="INFO-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>logs/info.log</file>
      
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
    
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
      
      <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>info.%i.log</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>3</maxIndex>
    </rollingPolicy>
    
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    
  </appender>
  
  
  <!-- 按日期和大小区分的滚动日志 -->
  <appender name="DEBUG-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>logs/debug.log</file>

    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
      
      <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
      
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      
    </rollingPolicy>
    
  </appender>
  
  
   <!-- 级别阀值过滤 -->
  <appender name="SUM-OUT" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>logs/sum.log</file>

    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
    </encoder>
      
    <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>

      
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      
    </rollingPolicy>
    
  </appender>
  
  
  <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ERROR-OUT" />
    <appender-ref ref="INFO-OUT" />
    <appender-ref ref="DEBUG-OUT" />
    <appender-ref ref="SUM-OUT" />
  </root>
</configuration>
复制代码

另一个更简单的:

 View Code


2.3 示例

复制代码
public class Slf4jTest {

    private static Logger Log = LoggerFactory.getLogger(Slf4jTest.class);
    
    @Test
    public void testLogBack(){
        
        Log.debug("Test the MessageFormat for {} to {} endTo {}", 1,2,3);
        Log.info("Test the MessageFormat for {} to {} endTo {}", 1,2,3);
        Log.error("Test the MessageFormat for {} to {} endTo {}", 1,2,3);
        
        try{
            throw new IllegalStateException("try to throw an Exception");
        }catch(Exception e){
            Log.error(e.getMessage(),e);
        }
    }
    
}
复制代码

  

分享到:
评论

相关推荐

    logback-kafka-appender:适用于Apache Kafka的Logback附加程序

    logback-kafka-appender 该追加程序使您的应用程序可以将其应用程序日志直接发布到... &lt; artifactId&gt;logback-kafka-appender&lt;/ artifactId&gt; &lt; version&gt;0.2.0&lt;/ version&gt; &lt; scope&gt;runtime&lt;/ scope&gt; &lt;/ dependenc

    springboot+mybatis+logback

    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt; &lt;!-- &lt;scope&gt;provided&lt;/scope&gt; --&gt; &lt;/dependency&gt; 另外需要去掉依赖: &lt;dependency&gt; &lt;groupId&gt;org....

    logback-fluentd-appender:Logback流利的Appender

    正在安装###从Maven2存储库安装jar配置pom.xml: &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.sndyuk&lt;/groupId&gt; &lt;artifactId&gt;logback-fluentd-appender&lt;/artifactId&gt; &lt;version&gt;1.1.0&lt;/version&gt; &lt;/dependency&gt;&lt;/...

    基于SpringBoot自动装配实现的对于OpenFeign扩展请求传递traceId,分布式服务日志查询串联标记

    引用步骤: 1.基于SpringBoot自动装配,引用jar包即可,坐标如下: &lt;dependency&gt; ...&lt;Pattern&gt;[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%X{traceId}] [%thread] %-5level %logger{80} %line - %msg%n&lt;/Pattern&gt;

    logback-ext-spring

    &lt;param-value&gt;/WEB-INF/conf/logback.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;listener&gt; &lt;listener-class&gt;ch.qos.logback.ext.spring.web.LogbackConfigListener&lt;/listener-class&gt; &lt;/listener&gt; 即可加载logback...

    logback-json-jackson

    下载工件释放: Maven:&lt; dependency&gt; &lt; groupId&gt;com.themodernway&lt;/ groupId&gt; &lt; artifactId&gt;logback-json-jackson&lt;/ artifactId&gt; &lt; version&gt;2.0.1-RELEASE&lt;/ version&gt;&lt;/ dependency&gt; Gradle: dependencies { ...

    logback-redis-appender:重新登录Redis Appender

    &lt; artifactId&gt;logback-redis-appender&lt;/ artifactId&gt; &lt; version&gt;1.1.6&lt;/ version&gt; &lt;/ dependency&gt; 可配置选项 与Redis相关(RedisAppender属性) 键:(必需)Redis键,用于将日志附加到 host :(可选,默认值:...

    logback-servlet:Servlet for Logback在运行时配置日志级别

    回送小服务程序 Servlet for Logback在运行时配置日志级别。 特征 在运行时更改每个记录器的Logback级别 从初始logback.xml将级别重置为其默认值 ... &lt; servlet&gt;logback&lt;/ servlet&gt; &lt; servlet-cl

    influxdb-logback:用于 Logback 的 InfluxDB Appender

    INFLUXDB-LOGBACK 用于 Logback 的 InfluxDB Appender ... &lt;groupId&gt;org.labaix.logback&lt;/groupId&gt; &lt;artifactId&gt;influxdb-logback&lt;/artifactId&gt; &lt;version&gt;0.42&lt;/version&gt; &lt;/dependency&gt; ... &lt;/depen

    ssm项目基础框架(多数据源支持)

    版本 &lt;properties&gt; &lt;!-- 设置版本和字符集 --&gt; ... &lt;logback.version&gt;1.1.7&lt;/logback.version&gt; &lt;mysql.version&gt;8.0.18&lt;/mysql.version&gt; &lt;mybatis.version&gt;3.4.5&lt;/mybatis.version&gt; &lt;/properties&gt;

    logback-elasticsearch-appender:重新登录Elasticsearch Appender

    重新登录Elasticsearch Appender 将日志事件直接从Logback发送到Elasticsearch。 日志是异步传递的(即... 在您的pom.xml (或等效文件)中,添加: &lt;dependency&gt; &lt;groupId&gt;com.internetitem&lt;/groupId&gt; &lt;artifactId&gt;lo

    logback源代码

    rar包中包括:logback源代码,以及struts2的基础的页面跳转,...&lt;prudent&gt;true&lt;/prudent&gt;默认为false,如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。

    stackify-log-logback:适用于Java日志记录框架Logback的Stackify Log Appender

    &lt; artifactId&gt;stackify-log-logback&lt;/ artifactId&gt; &lt; version&gt;4.0.1&lt;/ version&gt; &lt; scope&gt;runtime&lt;/ scope&gt; &lt;/ dependency&gt; 用法 附加程序配置示例: &lt; appender xss=removed xss=removed&gt; &lt; a

    kinesis-logback-appender:LOGBack Appender用于将数据写入Kinesis Stream

    &lt; bufferSize&gt;1000&lt;/ bufferSize&gt; &lt; threadCount&gt;20&lt;/ threadCount&gt; &lt; endpoint&gt;kinesis.us-east-1.amazonaws.com&lt;/ endpoint&gt; &lt;!-- Specify endpoint OR region --&gt; &lt; region&gt;us-east-1&lt;/ reg

    浅谈spring boot 集成 log4j 解决与logback冲突的问题

    现在很流行springboot的开发,小编闲来无事... &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/g

    sumologic-logback-appender:将数据发送到Sumo Logic HTTP源的Logback附加程序

    &lt;groupId&gt;com.sumologic.plugins.logback&lt;/groupId&gt; &lt;artifactId&gt;sumologic-logback-appender&lt;/artifactId&gt; &lt;version&gt;1.5&lt;/version&gt; &lt;/dependency&gt; 用法 在Sumo Logic中设置HTTP托管收集器源 请按照以下说明在...

    BudWk企业级开源开发框架-其他

    &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;BudWk(原名 NutzWk)运行环境:&lt;/p&gt;&lt;p&gt;JDK 8 181 + 或 OpenJDK 11 +&lt;/p&gt;&lt;p&gt;Redis 4.0.8 +&lt;/p&gt;&lt;p&gt;MySql 5.7 + 或 MariaDB、Oracle、SqlServer、达梦等&lt;/p&gt;&lt;p&gt;Zookeeper 3.4.13 +&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;BudWk...

    cloudwatch-logback-appender:将签发日志条目发布到AWS CloudWatch的Appender

    Maven软件包通过发布 享受,格雷·沃森Maven配置&lt; dependencies&gt;&lt; dependency&gt;&lt; groupId&gt;com.j256.cloudwatchlogbackappender&lt;/ groupId&gt;&lt; artifactId&gt;cloudwatchlogbackappender&lt;/ artifactId&gt;&lt;!-- NOTE: ...

    socket-encoder-appender:使用编码器通过 TCP 发送日志的 Logback Appender

    使用日志进行编码的 Appender,并通过 TCP 将结果发送到远程主机。 为什么不使用普通的 SocketAppender?... &lt; artifactId&gt;socket-encoder-appender&lt;/ artifactId&gt; &lt; version&gt;0.1beta1&lt;/ version&gt; &lt;/ dep

    logstash-gelf:适用于所有主要日志记录框架的Java Graylog扩展日志格式(GELF)实现

    &lt; groupId&gt;biz.paluch.logging&lt;/ groupId&gt; &lt; artifactId&gt;logstash-gelf&lt;/ artifactId&gt; &lt; version&gt;x.y.z&lt;/ version&gt; &lt;/ dependency&gt; 从Maven Central直接下载 JBoss AS / WildFly模块下载: &lt; dependency&gt; &lt; ...

Global site tag (gtag.js) - Google Analytics