Logback

Logback

Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。

官方网站:https://logback.qos.ch/index.html

Logback主要分为三个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

案例演示

添加pom.xml文件

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.25</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>

添加测试类

public class LogbackService {

    //定义日志对象
    public final static Logger LOGGER = LoggerFactory.getLogger(LogbackService.class);
    @Test
    public void testSlf4j(){ //打印日志信息
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");
    }
}

logback配置

logback会依次读取以下类型配置文件:

  • logback.groovy
  • logback-test.xml
  • logback.xml 如果均不存在会采用默认配置

logback组件之间的关系

  1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也 可以定义日志类型、级别。

  2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。

  3. Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中

基本配置信息
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>

    <!--设置apender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
      <!--输出流对象 默认 System.out 改为System.err-->
        <target>System.err</target>
      <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
    <root level="ALL">
        <appender-ref ref="console"/>
    </root>
</configuration>

pattern

ch.qos.logback.classic.PatternLayout中可以看到相关的字符替代,如:

  • %level:日志的级别
  • %d:日期
    • $d{yyyy-MM-dd HH:mm:ss.SSS}
  • %m:方法名
  • %L:行号
  • %thread:线程名
  • %msg:信息
  • %n:换行
  • %logger{length}:logger名,length可以缩短logger名
  • %C{length}:全限定类名,length可以缩短class名

格式修饰符

  • 左对齐:-+最小宽度,用十进制表示
    • 如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。如果字符大于最小宽度,字符永远不会被截断。
  • 最大宽度:.+最大宽度,十进制表示
    • 如果字符大于最大宽度,则从前面截断。点符号.后面加减号-在加数字,表示从尾部截断。
Format modifierLogger nameResult
[%20.20logger]main.Name[ main.Name]
[%-20.20logger]main.Name[main.Name ]
[%10.10logger]main.foo.foo.bar.Name[o.bar.Name]
[%10.-10logger]main.foo.foo.bar.Name[main.foo.f]

Appender

Appender:设置日志信息的取向,常用的有以下几个

  • ch.qos.logback.core.ConsoleAppender:控制台
  • ch.qos.logback.core.rolling.RollingFileAppender:文件大小到达指定大小的时候生成一个新的文件
  • ch.qos.logback.core.FileAppender:文件

root

root:用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>

fileAppender配置

输出到log文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>

    <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>

    <!--设置apender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


       <!--设置 file apender-->
    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <file>${log_dir}/logback.log</file>
    </appender>

    <!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>
</configuration>

输出到html文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>

    <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>

    <!--设置apender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>
    <!-- 生成html格式appender对象 -->
    <appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%level%d{yyyy-MM-dd HH:mm:ss}%c%M%L%thread%m</pattern>
            </layout>
        </encoder>
        <!--日志输出路径-->
        <file>${log_dir}/logback.html</file>
    </appender>

    <!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="htmlFile"/>
    </root>
</configuration>
RollingFileAppender配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>

    <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>

    <!--设置apender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


    <!-- 日志文件拆分和归档的appender对象-->
    <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>${log_dir}/roll_logback.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
        <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
        <!--文件拆分大小-->
        <maxFileSize>20kb</maxFileSize>
    </rollingPolicy>
    </appender>

    <!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="rollFile"/>
    </root>
</configuration>
filter和异步日志
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
    <property name="pattern" value="%logger{3} %d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread] %10level  %msg%n"/>

    <property name="log_dir" value="/Users/machoul/IdeaProjects/machoul-log-test/machoul-logback-test/log"/>

    <!--设置apender-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>


    <!-- 日志文件拆分和归档的appender对象-->
    <appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志格式配置-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!--日志输出路径-->
        <file>${log_dir}/roll_logback.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>20kb</maxFileSize>
        </rollingPolicy>
        <!--filter配置-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--设置拦截日志级别-->
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--异步日志-->
    <appender name="async" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="rollFile"/>
    </appender>


    <!--用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>-->
    <root level="ALL">
        <appender-ref ref="console"/>
        <appender-ref ref="async"/>
    </root>


    <!--自定义logger additivity表示是否从 rootLogger继承配置-->
    <logger name="com.machoul" level="debug" additivity="false">
        <appender-ref ref="rollFile"/>
    </logger>

</configuration>

logback-access的使用

logback-access模块与Servlet容器(如TomcatJetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。

官方配置的地址:https://logback.qos.ch/access.html#configuration

  1. logback-access.jarlogback-core.jar复制到$TOMCAT_HOME/lib/目录下
  2. 修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加:
<Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
  1. logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- always a good activate OnConsoleStatusListener -->
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
  
  <property name="LOG_DIR" value="${catalina.base}/logs"/>
  
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_DIR}/access.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    </rollingPolicy>
    <encoder>
			<!-- 访问日志的格式 --> 
      <pattern>combined</pattern>
    </encoder>
  </appender>
  
  <appender-ref ref="FILE"/>
</configuration>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker可以与Logback集成,以便在Docker容器中记录日志。要在Docker中使用Logback,您需要进行以下步骤: 1. 首先,确保您已经安装和配置了Docker和ELK(Elasticsearch、Logstash、Kibana)堆栈,您可以根据引用和引用中的步骤进行安装和配置。 2. 在您的应用程序的pom.xml文件中添加Logback的依赖项。例如,添加以下依赖项: ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> ``` 3. 创建一个logback.xml文件,该文件包含Logback的配置信息。您可以在该文件中定义日志的格式、输出目标等。以下是一个简单的logback.xml示例: ```xml <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT"/> </root> </configuration> ``` 在这个示例中,日志将输出到控制台,并且使用了指定的格式。 4. 在您的应用程序中,根据您使用的编程语言和框架,将Logback配置为使用指定的logback.xml文件。这通常涉及到在应用程序的配置文件中指定日志的配置文件路径或在代码中进行相应的配置。 5. 构建和运行您的应用程序的Docker镜像。确保将上述步骤中所定义的logback.xml文件包含在Docker镜像中。 例如,使用Dockerfile构建镜像时,可以添加以下指令将logback.xml文件复制到镜像中: ``` COPY logback.xml /path/to/logback.xml ``` 然后,在Dockerfile中指定使用该logback.xml文件: ``` ENTRYPOINT ["java", "-Dlogback.configurationFile=/path/to/logback.xml", "-jar", "your-application.jar"] ``` 这将告诉应用程序在容器中使用指定的logback.xml文件进行日志记录。 如此一来,您的Docker容器将使用Logback来记录应用程序的日志。您可以根据需要进行自定义配置,以满足您的特定需求。请注意,这只是一个简单的示例,实际配置可能因您的应用程序和环境而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值