(五)Logback中的Layout

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: ayout是logback中负责把日志事件转换成成字符串的组件

一、什么是Layout?


Layout是logback中负责把日志事件转换成成字符串的组件,接口如下:

public interface Layout<E> extends ContextAware, LifeCycle {
  String doLayout(E event);
  String getFileHeader();
  String getPresentationHeader();
  String getFileFooter();
  String getPresentationFooter();
  String getContentType();
}


二、自定义Layout


1、继承自LayoutBase接口即可,如下:

package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.LayoutBase;
public class MySampleLayout extends LayoutBase<ILoggingEvent> {
  public String doLayout(ILoggingEvent event) {
    StringBuffer sbuf = new StringBuffer(128);
    sbuf.append(event.getTimeStamp() - event.getLoggingContextVO.getBirthTime());
    sbuf.append(" ");
    sbuf.append(event.getLevel());
    sbuf.append(" [");
    sbuf.append(event.getThreadName());
    sbuf.append("] ");
    sbuf.append(event.getLoggerName();
    sbuf.append(" - ");
    sbuf.append(event.getFormattedMessage());
    sbuf.append(CoreConstants.LINE_SEP);
    return sbuf.toString();
  }
}

日志输出如下:

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="chapters.layouts.MySampleLayout" />
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>


2、包含自定义属性的layout,自定义实现如下:

package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.LayoutBase;
public class MySampleLayout2 extends LayoutBase<ILoggingEvent> {
  String prefix = null;
  boolean printThreadName = true;
  public void setPrefix(String prefix) {
    this.prefix = prefix;
  }
  public void setPrintThreadName(boolean printThreadName) {
    this.printThreadName = printThreadName;
  }
  public String doLayout(ILoggingEvent event) {
    StringBuffer sbuf = new StringBuffer(128);
    if (prefix != null) {
      sbuf.append(prefix + ": ");
    }
    sbuf.append(event.getTimeStamp() - event.getLoggerContextVO().getBirthTime());
    sbuf.append(" ");
    sbuf.append(event.getLevel());
    if (printThreadName) {
      sbuf.append(" [");
      sbuf.append(event.getThreadName());
      sbuf.append("] ");
    } else {
      sbuf.append(" ");
    }
    sbuf.append(event.getLoggerName());
    sbuf.append(" - ");
    sbuf.append(event.getFormattedMessage());
    sbuf.append(LINE_SEP);
    return sbuf.toString();
  }
}


配置文件如下:

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="chapters.layouts.MySampleLayout2"> 
        <prefix>MyPrefix</prefix>
        <printThreadName>false</printThreadName>
      </layout>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

有效转换词以及相关选项如下表:WechatIMG115387.jpegWechatIMG115388.jpegWechatIMG115389.jpegWechatIMG115390.jpegWechatIMG115388.jpegWechatIMG115392.jpegWechatIMG115394.jpeg四、格式修饰符


通过格式修饰符可以改变数据域最小和最大宽度,格式修饰符位于百分号和转换词之间,默认格式是右调整,左调整可以使用(-)减号,下面是一些示例:WechatIMG115395.jpeg下面这张表是格式修饰符截取的例子,注意方括号不是日志输出的一部分,只用来分割日志输出的宽度。WechatIMG115396.jpeg

相关文章
|
5月前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
91 2
|
5月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
226 1
|
XML 安全 Oracle
logback的使用和logback.xml详解
logback的使用和logback.xml详解
478 0
(六)Logback中的Filter
规律型过滤器继承自Filter抽象类,该类主要由带有ILoggingEvent参数的decide()方法组成。多个过滤器会基于三进制规则进行排序,每个过滤器的decide(ILoggingEvent event)方法依次会被调用,该方法返回FilterReply的枚举值,例如:DENY、NEUTRAL、ACCEPT。如果方法返回值为DENY,那么日志对象会被终止而不会被其它过滤器访问。
|
Java jenkins Linux
Logback使用总结
整理了下logback的常用点功能,并记录了一些在使用过程中的疑问,和问题的排错过程,防止自己再犯类似错误,也希望对路过的你有所帮助。
754 0
|
Java
Logback - additivity
Logback - additivity
457 0
|
XML Java Android开发
Android Layout Inflate分析(3) - 深入Layout XML属性
inflate分析第3章,分析如何用XmlPullParser从XML中读取属性,以及如何从编译好资源XML中读取属性和资源的值。
4443 0
|
存储 JSON 监控
logback自定义Appender和Layout
logback自定义Appender和Layout @Date 2017.05.09 Appender是logback中最重要的组件之一,它委托encoder组件来完成LoggingEvent的格式化和记录,具体源码分析网上有很多, 本文主要是应用实践.
4540 0
|
XML Android开发 数据格式
【Android错误集锦】AppBarLayout is overlapping the RecyclerView in one of my xml files.
问题现象:recyclerview 中的顶部数据被appbar遮盖,如下图红框所示 解决方法: 在activity_main.xml里面CoordinatorLayout布局下 即与AppBarLayout布局并列下加上 如下代码 <!--app:layout_beh.
1621 0