场景

一般情况下,日志打印的内容都是根据配置文件中配置的pattern格式指定好的。在我们调用logger.info(), logger.debug()等日志打印方法时,打印的内容格式与配置文件中的pattern格式一致。

例如,在logback.xml配置文件中指定了日志打印格式:

%d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}-%L] %msg%n"

这些格式的意义在官网的文档上都有说明。其中%msg就是我们调用日志打印方法时输入的内容。

当官方指定的这些格式不能满足我们的需求,或者是我们需要在打印日志的时候,需要加上一些比较有规律的内容,例如打印本机的hostname/ip等logback本身没有提供的格式的时候,我们就可以自定义日志输出的内容与格式。

一、实现自定义Converter

import java.io.PrintWriter;
import java.io.StringWriter; import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.fastjson.JSONObject; import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent; public class LogMessageConverter extends MessageConverter{
@Override
public String convert(ILoggingEvent event){
//可以在里面增加其他处理,此处return的字符串就是日志输出的最终内容
return super.convert(event);
}
|

创建一个类LogMessageConverter继承MessageConverterMessageConverter中就只有一个方法convert,代码如下:

package ch.qos.logback.classic.pattern;

import ch.qos.logback.classic.spi.ILoggingEvent;

/**
* Return the event's formatted message.
*
* @author Ceki Gülcü
*/
public class MessageConverter extends ClassicConverter {
public String convert(ILoggingEvent event) {
return event.getFormattedMessage();
}
}

这个类的作用在它的注释中解释了:返回格式化之后的message。它继承ClassicConverter,而ClassicConverter是所有Converter的父类。因此,如果我们需要在原有日志打印内容的基础上加上一些内容,就可以在自定义Converter中的convert中实现自己的逻辑处理即可。

二、修改配置文件

完成了自定义的Converter之后,就是将这个Converter配置到配置文件中。在logback配置文件中的根节点<configuration>下增加节点<conversionRule>,例如:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<conversionRule conversionWord="msg" converterClass="com.xxx.xxx.log.LogMessageConverter" />
//....
</configuration>

<conversionRule>节点中的conversionWord="msg"属性,就是表示在pattern中指定%msg时,调用的就是converterClass属性中指定的Converter

Logback自定义日志输出内容的更多相关文章

  1. HAproxy增加日志记录功能和自定义日志输出内容、格式

    http://blog.51cto.com/eric1/1854574 一.增加haproxy日志记录功能   1.1 由于数据分析的需要,我们必须打开haproxy日志,记录相关信息. 在配置前,我 ...

  2. 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

    1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...

  3. Java自定义日志输出文件

    Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...

  4. springboot(二).springboot整合logback用于日志输出

    springboot整合logback用于日志输出 我们项目的基本框架已经完成,http请求已经可以访问,现在给我们的框架添加日志记录的功能并能将每天的记录记录到文件中去 在这里,我们使用logbac ...

  5. 《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)

    1.简介 上一篇宏哥介绍是如何使用logback将日志输出到控制台中,但是如果需要发给相关人需要你拷贝出来,有时候由于控制台窗口的限制,有部分日志将会无法查看,因此我们还是需要将日志输出到文件中,因此 ...

  6. 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)

    1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...

  7. Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)

    过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...

  8. logback配置日志输出

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...

  9. Logback自定义日志颜色

    片段 1 片段 2 LogbackColorful.java package cn.mrxionge.netdemo; import ch.qos.logback.classic.Level; imp ...

随机推荐

  1. Mongodb集群之副本集

    上篇咱们遗留了几个问题 1主节点是否能自己主动切换连接? 眼下须要手动切换 2主节点读写压力过大怎样解决 3从节点每一个上面的数据都是对数据库全量拷贝,从节点压力会不会过大 4数据压力达到机器支撑不了 ...

  2. 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)

    前言 对前面的东西更新了一下.地方包括: 1.GUI的更新,更友好的用户界面 2.支持用手直接画车辆区域,并且识别出来 3.将proposal.detect.fine-grained classifi ...

  3. 42.angularJS自定义服务

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. 你可以创建自定义服务,链接到你的模块中: <!DOCTYPE html> <html& ...

  4. Copying

    Aliasing can make program difficult to read because changes made in one place might have unexpected ...

  5. dom4j组装xml 以及解析xml

    dom4j组装xml 以及解析xml: 1.下载dom4j的jar包,地址:https://dom4j.github.io/ 2.java代码: package test; import java.i ...

  6. C语言基础-第五章

    流程控制 1.顺序结构 顺序结构是指程序将按照书写的顺序一步步执行程序. 2.选择结构 2.1但分支结构语句 if(表达式){语句} 2.2双分支结构 if(表达式){}else if{} else{ ...

  7. 数据绑定的知识点<%%>,<%#%>,<%=%>

    1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...

  8. 从Chrome源码看audio/video流媒体实现一(转)

    现在绝大多数的网站已经从flash播放器转向了浏览器原生的audio/video播放器,浏览器是如何加载和解析多媒体资源的,这对于web开发者来说是一个黑盒,所以很有必要看一下浏览器是怎么实现的,Ch ...

  9. Unity ContextMenu特性

    有时候我们需要在编辑器下,频繁的做一些操作,比如说在不同的位置创建物体,一个个的修改坐标显然有点繁琐 这时候ContextMenu就派上用处了 例:利用 LineRenderer 画圆,我们不可能一个 ...

  10. COGS——T1310. [HAOI2006]聪明的猴子

    http://cogs.pro/cogs/problem/problem.php?pid=1310 ★   输入文件:monkey.in   输出文件:monkey.out   简单对比时间限制:1 ...