1. 什么是encoder?

1.1. Encoder负责两件事, 一是把事件转换为字节数组, 二是把字节数组写入输出流。在logback 0.9.19版之前没有encoder。在之前的版本里, 多数appender依靠layout来把事件转换成字符串并用java.io.Writer把字符串输出。在之前的版本里, 用户需要在FileAppender里嵌入一个PatternLayout。而从0.9.19版开始, FileAppender和其子类使用encoder, 不接受layout。

2. 为什么变了?

2.1. Layout只负责把事件转换为字符串。此外, 因为layout不能控制事件何时被写出, 所以不能成批地聚集事件。相比之下, encoder不但可以完全控制待写出的字节的格式, 而且可以控制字节何时及是否被写出。

2.2. 目前, PatternLayoutEncoder是唯一有用的encoder, 它基本上是封装了PatternLayout, 让PatternLayout负责大多数工作。因此, 似乎encoder并没有带来多少好东西, 反而只有不需要的复杂性。然而, 我们希望当新的、强大的encoder到来时, 这种印象会改变。

3. Encoder接口

3.1. Encoder负责把事件转换为字节数组并把字节数组写出到合适的输出流。因此, encoder可以完全控制在什么时候、把什么样的字节写入到由其拥有者appender维护的输出流。

3.2. Encoder接口

4. LayoutWrappingEncoder类

4.1. 在logback0.9.19版之前, appender依赖layout提供输出格式的灵活性。因为有大量现存代码是基于layout接口的, 所以我们需要想办法让encoder与layout实现互操作。 LayoutWrappingEncoder连接了encoder和layout, 它实现encoder接口, 并且包裹了一个layout, layout负责把事件转换成字符串。

4.2. 下面是LayoutWrappingEncoder类的代码片段, 阐述了如何把工作委托给layout实例。

4.3. encode方法首先让被包裹的layout把传入的事件转换成字符串, 再根据用户选择的字符集编码把字符串转换成字节。start方法自己写入其拥有者appender指定的输出流。

5. PatternLayoutEncoder类

5.1. 既然PatternLayout是最常用的layout, logback便提供了PatternLayoutEncoder, 它扩展了LayoutWrappingEncoder, 且仅使用PatternLayout。从logback 0.9.19版起, FileAppender或其子类在只要用到PattternLayout时, 都必须换成PatternLayoutEncoder。

5.2. PatternLayoutEncoder类

016_logback中的Encoder相关推荐

  1. Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的

    Transformer中的encoder和decoder在训练和推理过程中究竟是如何工作的 苦苦冲浪,找不到答案 Transformer结构(随便冲浪均可查到) Transformer推理过程 Tra ...

  2. TensorFlow中RNN实现的正确打开方式

    上周写的文章<完全图解RNN.RNN变体.Seq2Seq.Attention机制>介绍了一下RNN的几种结构,今天就来聊一聊如何在TensorFlow中实现这些结构,这篇文章的主要内容为: ...

  3. java中byte, iso-8859-1, UTF-8,乱码的根源

    本文作者:@Ryan Miao 本文链接:https://www.cnblogs.com/woshimrf/p/java-utf8-iso-charset.html 版权声明: 本博客所有文章除特别声 ...

  4. encoder decoder模型_如何突破Decoder性能瓶颈?揭秘FasterTransformer的原理与应用

    位来 发自 凹非寺 量子位 报道 | 公众号 QbitAI 4月9日,英伟达x量子位分享了一期nlp线上课程,来自NVIDIA的GPU计算专家.FasterTransformer 2.0开发者之一的薛 ...

  5. 【推荐系统】变分自编码器(VAEs)在推荐系统中的应用

    「本文概览」 今天给大家介绍一篇VAEs用于推荐系统召回侧的文章,论文题目为<Variational Autoencoders for Collaborative Filtering>.V ...

  6. 【推荐系统】双塔模型中的负采样

    作者:十方 推荐模型中双塔模型早已经普及.一个塔学用户表达.一个塔学item表达.很多双塔模型用各种各样的in-batch负采样策略.十方也是如此.往往使用比较大的batchsize,效果会比较好,但 ...

  7. WebRTC Audio Encoder/Decoder Factory 的实现

    Audio encoder factory 用于创建完成各种 audio codec 编码的 encoder 对象,audio decoder factory 则用于创建完成各种 audio code ...

  8. TensorFlow中RNN实现的正确打开方式(转)

    上周写的文章<完全图解RNN.RNN变体.Seq2Seq.Attention机制>介绍了一下RNN的几种结构,今天就来聊一聊如何在TensorFlow中实现这些结构,这篇文章的主要内容为: ...

  9. 鸿蒙轻量设备侧Camera应用中的Surface使用

    鸿蒙轻量设备侧Camera应用中的Surface使用 本文作者:江苏润和软件股份有限公司 郎建中 一.总体描述 在鸿蒙轻量设备侧图形子系统中包含了Surface模块.这个模块模仿了Android的Su ...

最新文章

  1. iOS imageNamed 的缓存问题
  2. php键值交换,php键值互换时走的一个弯路
  3. [推荐]大量 Blazor 学习资源(三)
  4. 【转载】生机勃勃的秋菊freeeim
  5. [zz]shell 中条件测试
  6. 【c++模板实现】二叉查找树
  7. Python学习之路day02——007字典的嵌套
  8. C语言编程中 提取运行时间的函数,C语言中用于修改文件的存取时间的函数使用...
  9. 图的应用之--图的连通
  10. 【死磕 Spring】—– IOC 之 bean 的初始化
  11. 三角网导线平差实例_附合导线平差教程
  12. 30余种加密编码类型的密文特征分析(建议收藏)
  13. ArcGIS实验教程——实验二十八:统计图表(饼状图、柱状图)制作
  14. 每日一道leetcode(python)347. 前 K 个高频元素
  15. 0xff到底是多少(0x是16进制,f对应11111,因此是11111111,也就是2的8次方-1=255)
  16. 新三板开通精选层后,仅存的四家软件公司都是做什么的?
  17. 小白期货CTP程序化交易开发入门(一)--CTP开发基础
  18. Kaggle Faster Data Science Education coursera
  19. Python爬虫,某创意网站灵感视频采集下载
  20. 2023年MathorCup数模D题赛题解题思路

热门文章

  1. [03]常用正则表达式
  2. OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
  3. DevExpress 11.1.6 重编译详细过程
  4. 求数组最小数平均值和和值
  5. 持续高温引发百姓热议 ***趁机放毒谋取暴利
  6. 文本比较算法Ⅲ——计算文本的相似度
  7. SQLSERVER中修复状态为Suspect的数据库
  8. Kettle实例解析
  9. Django中使用Celery
  10. impala jdbc驱动执行impala sql的一个坑(不支持多行sql)