`
schy_hqh
  • 浏览: 558031 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Chapter 5: Encoders

 
阅读更多

What is an encoder

编码器负责将事件转化为字节数组,并将字节数组转换成一个OutputStream 。

Encoder ---> Byte[] ---> OutputStream

 

在0.9.19版本之前,大多数的appender都依赖layout布局组件将事件转换为字符串String

在使用java.io.Writer将其写入到文件

在0.9.19版本之前,对FileAppender将在内部嵌套PatternLayout进行样式设置

从0.9.19版本开始,FileAppender将通过Encoder设置样式,不再设置layout属性了

 

This appender no longer admits a layout as a sub-component, set an encoder instead.

to (GOOD)

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%msg%n</pattern>
  </encoder>
</appender>  

or the shorter equivalent (GOOD) 

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <!-- encoders are assigned the type 
       ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
  <encoder>
    <pattern>%msg%n</pattern>
  </encoder>
</appender> 

 

For layout type other than PatternLayout, for example HTMLLayout, your configuration files need to be changed

to (GOOD)

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="ch.qos.logback.classic.html.HTMLLayout">
      <pattern>%msg%n</pattern>
    </layout>
  </encoder>
</appender> 

 

Layouts仅仅能够将event转换为某种样式的字符串String

此外,鉴于Layout无法控制何时对event进行写出,也没有批处理能力

Encoder不仅提供了写出字节数组的格式,还可以控制何时进行写出操作

Encoder兼备Layout样式和决定日志写出时机的功能

到目前为止,PatternLayoutEncoder是唯一真正使用的Encoder

PatternLayoutEncoder包装了一个LayoutPattern,从而提供了设置样式的功能

 

Encoder负责将event转换为Byte[],并将结果写到合适的OutputStream流中

这样,appender就可以通过Encoder完全控制何时什么bytes进行写出操作

 

LayoutWrappingEncoder

直到logback版本0.9.19 ,许多appender都依赖于布局实例来控制日志输出格式

由于Layout 的接口已经提供了大量的样式设置功能,我们只需要将Encoder与Layout结合在一起即可

LayoutWrappingEncoder作为一个桥梁,有效的将Encoder与Layout两者结合在一起

LayoutWrappingEncoder实现了Encoder接口,并对Layout进行了包装(Layout将event转换为字符串)

 

由此,得到:

Event ---> Layout ---> Formated String ---> Encoder ---> Byte[] ---> OutputStream 

 

LayoutWrappingEncoder

package ch.qos.logback.core.encoder;

public class LayoutWrappingEncoder<E> extends EncoderBase<E> {

  protected Layout<E> layout;
  private Charset charset;
  private boolean immediateFlush = true;

  public void doEncode(E event) throws IOException {
    String txt = layout.doLayout(event);
    outputStream.write(convertToBytes(txt));
    if (immediateFlush)
      outputStream.flush();
  }

  private byte[] convertToBytes(String s) {
    if (charset == null) {
      return s.getBytes();
    } else {
      return s.getBytes(charset);
    }
  } 
}

 

 

PatternLayoutEncoder

鉴于PatternLayout是最常用的布局, logback这种常见的用例满足与PatternLayoutEncoder 

immediateFlush property

true: 保证日志及时输出到文件,会影响系统处理日志的吞吐量;

false:可以大大提高日志处理的throughout,大概5倍,但有可能造成日志丢失(appender没有正确关闭);

<appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
  <file>foo.log</file>
  <encoder>
    <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
    <!-- this quadruples logging throughput -->
    <immediateFlush>false</immediateFlush>
  </encoder> 
</appender>

 

 

Output pattern string as header

在输入日志的上方,输出日志的Pattern

默认为false,不在头部输出样式

<appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
  <file>foo.log</file>
  <encoder>
    <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
    <outputPatternAsHeader>true</outputPatternAsHeader>
  </encoder> 
</appender>

 

This will result output akin to the following in the log file: 

#logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n
2012-04-26 14:54:38,461 [main] DEBUG com.foo.App - Hello world
2012-04-26 14:54:38,461 [main] DEBUG com.foo.App - Hi again

 

%d                   日期:2012-04-26 14:54:38,461

[%thread]         线程:[mian]

%-5level           级别:DEBUG

%logger{36}  类路径:com.foo.App

%msg               消息:Hello world

%n                    换行

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Metal.编程向导英文版.and.Reference.via.Swift.pdf.zip

    Chapter 5: Introduction to Shaders 61 Metal Shading Language Overview 61 Setting Up Shaders 63 Your First Shader: Pass Through 63 Writing Your First Shader 68 Uniform Buffer 74 Summary 82 Chapter 6: ...

    C# 多线程网络下载工具发开

    整个设计按软件工程原理进行组织,文档规范、齐全。基本功能要求包括多线程、多文件、断点续传,其他功能(如智能文件分拆、多点下载等)自定;最后提交的报告内容包括实验目的、实验要求、实验原理(含参考文献)、...

    Context_Encoders_Feature_Learning_by_Inpainting.pdf

    By analogy with auto-encoders, we propose Context Encoders – a con- volutional neural network trained to generate the contents of an arbitrary image region conditioned on its surround- ings....

    [] - 2023-08-30 Kaggle知识点:Category Encoders库.pdf

    kaggle竞赛策略,算法讲解,AI模型介绍kaggle竞赛策略,算法讲解,AI模型介绍kaggle竞赛策略,算法讲解,AI模型介绍kaggle竞赛策略,算法讲解,AI模型介绍kaggle竞赛策略,算法讲解,AI模型介绍kaggle竞赛策略,算法...

    Org.BouncyCastle.Utilities.Encoders 等命名空间所需库

    主要用于加解密,我是在使用解密SM4 时接触到的,在网上代码引用了Org.BouncyCastle.Utilities.Encoders,找不到库 自己在网上找了好久找到了,没有积分的可以去http://www.bouncycastle.org/csharp/ 下载

    Python库 | fastai_category_encoders-0.0.3-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:fastai_category_encoders-0.0.3-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    马达encoders

    motor encoders

    encoders.h_arduinoencoders_

    5. **中断处理**:增量式编码器通常依赖于中断服务程序(ISR)来实时检测脉冲变化。`encoders.h` 可能定义了用于设置和处理中断的函数。 6. **事件驱动编程**:库可能会有一个 `update()` 方法,用户可以在主循环中...

    Python库 | simple_encoders-0.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:simple_encoders-0.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | contextual-encoders-0.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:contextual-encoders-0.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    category_encoders:sklearn兼容的分类变量编码器库

    重要连结文档: : 编码方式无监督: 后向差异对比[2] [3] BaseN [6] 二进制[5] 数[10] 杂凑[1] 赫尔默特对比[2] [3] 序数[2] [3] 一热[2] [3] 多项式对比[2] [3] 求和对比度[2] [3] 监督下: CatBoost [11] 广义线性...

    PyPI 官网下载 | soco-encoders-0.2.9.1.tar.gz

    《PyPI官网下载:深入解析soco-encoders-0.2.9.1.tar.gz》 在Python的世界里,PyPI(Python Package Index)是不可或缺的资源库,它为开发者提供了一个平台来分享和下载各种Python库。今天我们要探讨的是PyPI上的一...

    Python库 | soco_encoders-0.1.8-py3-none-any.whl

    5. **开发应用** 开发者可以基于`soco_encoders`库创建自定义的音乐播放控制程序,例如,创建一个家庭自动化系统的组件,将音乐播放集成到智能家居系统中,或者开发一个语音助手插件,让用户通过语音命令控制Sonos...

    Python库 | Flask-MIME-Encoders-0.1.1.zip

    资源分类:Python库 所属语言:Python 资源全名:Flask-MIME-Encoders-0.1.1.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics