(五)Logback中的Layout

简介: 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

相关文章
|
Java
JVM深入学习(十八)-如何查询当前jvm使用的垃圾回收器
如何查看使用的jdk用的垃圾回收器类型?
1367 0
|
8月前
|
人工智能 JSON 安全
无需复杂正则:SLS 新脱敏函数让隐私保护更简单高效
SLS 推出 mask 脱敏函数,支持 keyword 和 buildin 模式,简化敏感数据识别与处理,提升脱敏效率与性能,适用于结构化及非结构化日志。
356 71
|
人工智能 负载均衡 Java
Spring AI Alibaba 发布企业级 MCP 分布式部署方案
本文介绍了Spring AI Alibaba MCP的开发与应用,旨在解决企业级AI Agent在分布式环境下的部署和动态更新问题。通过集成Nacos,Spring AI Alibaba实现了流量负载均衡及节点变更动态感知等功能。开发者可方便地将企业内部业务系统发布为MCP服务或开发自己的AI Agent。文章详细描述了如何通过代理应用接入存量业务系统,以及全新MCP服务的开发流程,并提供了完整的配置示例和源码链接。未来,Spring AI Alibaba计划结合Nacos3的mcp-registry与mcp-router能力,进一步优化Agent开发体验。
3985 14
|
算法 网络安全 数据安全/隐私保护
证书转换-SSL证书生成:cer,jks文件 韩俊强的博客
一.生成.jks文件 资料:HTTPS-老司机手把手教你SSL证书申购-TrustAsia证书 HTTPS时代已来,手把手指导申请免费SSL证书 1、keystore的生成: 分阶段生成: keytool -genkey -alias yushan(...
8818 0
|
5月前
|
缓存 JSON 前端开发
Spring Boot集成Thymeleaf模板引擎
Thymeleaf 是现代Java服务端模板引擎,支持HTML静态原型与动态数据融合,前后端可协作开发。通过 `th:*` 标签动态渲染数据,浏览器可直接预览页面,无需启动服务。Spring Boot 中集成简单,只需引入依赖并配置关闭缓存即可。支持对象、List 数据展示,常用标签如 th:value、th:each、th:if 等,便于构建动态页面。适用于错误页、表单等场景,提升开发效率。
|
4月前
|
存储 人工智能 自然语言处理
从 RAG 到智能体:解决大模型“幻觉”的工程化路径探讨 (智能体来了——西南总部)
本文探讨如何通过RAG与AI Agent结合,工程化解决大模型“幻觉”难题。从原理到实践,详解检索增强、智能决策与生产部署路径,助力构建可信、可追溯、高准确性的企业级AI应用,释放大模型真实生产力。(238字)
470 0
|
关系型数据库 MySQL
cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
|
Java UED
基于SpringBoot自定义线程池实现多线程执行方法,以及多线程之间的协调和同步
这篇文章介绍了在SpringBoot项目中如何自定义线程池来实现多线程执行方法,并探讨了多线程之间的协调和同步问题,提供了相关的示例代码。
4984 0
|
数据采集 人工智能 自动驾驶
AI大模型都有的“幻觉病”,企业AI应用创新路上须警惕
法思诺创新提醒:AI大模型虽强大,但其“幻觉病”不容忽视。文章剖析了AI生成错误信息的现象及其成因,包括数据质量问题、缺乏常识理解及追求流畅度的倾向,并警示企业在医疗、法律、金融等关键领域应用AI时需警惕潜在风险。为应对挑战,应通过技术改进、人机协同和伦理规范三重手段约束AI行为,同时强调企业应以人为主导,将AI作为辅助工具,在享受技术便利的同时有效控制风险。
756 0

热门文章

最新文章