当前位置:首页 > 后端开发 > java日志框架系列(7):logback框架Layout详解

java日志框架系列(7):logback框架Layout详解

6个月前 (05-27)36

1.Layout

layout从字面意思来看就是排版、布局咯。

1.Layout简介

功能负责把事件转换成字符串。Layout接口的格式化方法doLayout()负责将代表任何类型的事件的转换成一个String对象并返回给调用者。

常用事件类型:ILoggingEvent。

Layout接口概要如下 :

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

接口很简单,却足够完成很多格式化需求。

2.Logback处理的事件类型种类

logback-classic模块中只会处理ch.qos.logback.classic.spi.ILoggingEvent类型的事件

3.自定义Layout

让我们实现一个简单却可工作的 layout,打印内容包括:自程序启动以来逝去的时间、记录事件的级别、包含在方括号里的调用者线程的名字、logger 名、连字符、事件消息和换行。
输出类似于:
java日志框架系列(7):logback框架Layout详解 _ Java侠

 

 示例1:

想要自定义layout,可以通过继承LayoutBase类,并重写doLayout方法,代码如下:

package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
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.getLoggerContextVO().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_SEPARATOR);
    return sbuf.toString();
  } 
}

java日志框架系列(7):logback框架Layout详解 _ Java侠

 编写完代码之后,需要在xml文件中配置自定义的layout,配置如下:

<configuration debug="true">
  <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>

由于在自定义类MySampleLayout中已经实现了继承的doLayout()方法,因此,在<encoder>标签中通过子标签<layout>指定已经实现转换功能的类MySampleLayout,该类MySampleLayout负责将ILoggingEvent类型事件转换为String类型。

4.为自定义的Layout添加参数

如何为 layout 增加选项?为 layout 或任何 logback 的其他组件添加属性非常简单:声明一个属性及 setter 方法接即可。MySampleLayout2 类包含两个属性。第一个是为输出添加的前缀。第二个是用于选择是否显示记录请求的线程名。
示例1:
代码如下:
package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
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(CoreConstants.LINE_SEPARATOR);     return sbuf.toString();   }
}
在配置里启用属性只需要有对应的 setter 方法即可。下面是 MySampleLayout2 所用的配置文件。
<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>

 

 

来源链接:https://www.cnblogs.com/z-x-p/p/11685690.html

标签: 日志框架

“java日志框架系列(7):logback框架Layout详解” 的相关文章

Java日志规范

Java日志规范

转载:http://blog.csdn.net/u012259256/article/details/52804637 Overview   一个在生产环境里...

(网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)

转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了。本篇博...

java——springboot(2)

java——springboot(2)

java——springboot(日志SLF4j、logback) SpringBoot选用了SLF4j(日志门面)和logback; 开发时,日志记录方法的调用...

什么是Spring和Spring的优点

什么是Spring框架   Spring是一个开源的一站式开发框架   它以IOC(控制反转)和AOP(面向切面)为核心   使用基本的JavaBean来完成以前只能由...

log4j教程 1、概述

log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),它在Apache软件许可下发布。    Log4...

Java日志框架SLF4J和log4j以及logback的联系和区别

Java日志框架SLF4J和log4j以及logback的联系和区别 1.SLF4J(Simple logging Facade for Java) 意思为简单日志门面,它是把不同...

搭建混合型驱动的自动化测试框架(一)

搭建混合型驱动的自动化测试框架(一)

  这里主要使用Junit的@Parameters注解和java的反射机制来搭建数据驱动+关键字驱动的混合型自动化测试框架。 以登录QQ邮箱为例,不再使用excel...

🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

🔥SpringBoot图文教程2—日志的使用「logback」「log4j」

有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试...

Spring Boot日志

Spring Boot日志

三、日志 1、日志框架 小张;开发一个大型系统; ​ 1、System.out.println("");将关键数据打印在控制台;去掉?写在一个...

Java 应用代码中异常打印 e.printStackTrace();

在Java开发中,无论是运行还是调试,一般都会对异常进行处理,一则明确问题出在哪个地方,一则也是代码完整性的一部分。谈到log日志,小编建议初学java的朋友使用框架集成的log4j、l...