返回顶部
首页 > 资讯 > 后端开发 > Python >logback 自定义Pattern模板教程
  • 217
分享到

logback 自定义Pattern模板教程

2024-04-02 19:04:59 217人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

配色板 "%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray","%

配色板

"%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray","%boldRed","%boldGreen", "%boldYellow", "%boldBlue", "%boldMagenta","%boldCyan", "%boldWhite","%highlight"

例:%red(XX),则 XX 这两个字为红色

其它 %p 表示level,%t表示线程

自定义Pattern模板

创建自定义格式转换符有两步:

1.写一个转换器类,继承ClassicConvert

示例代码:


public class IpConvert extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        String ip = "10.10.10.10";
        return ip;
    }
}

2.在logback.xml中注册该转换器,并自定义转换符

注册:


<conversionRule conversionWord="ip" converterClass="com.hjx.log4j.IpConvert" />

自定义ip转换符:


<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}%ip [%thread] %-5level %logger{36} -% msg%n</Pattern>

经过这两步骤后,即可将自定义的ip转换符添加到输出模板当中了。

测试结果:

2015-05-01 15:25:16.887 10.10.10.10 [main] INFO c.s.f.log.nORMal.TestAppender

这里的10.10.10.10便是转换后的值了。

上面的步骤只是基本的自定义模板方法,不好的地方就是要在配置文件里注册,实际上只要模仿logback原生创建的方法把这个转换符加进去就可以了。可以看下PatternLayout.java源码


public class PatternLayout extends PatternLayoutBase<ILoggingEvent> {  
  public static final Map<String, String> defaultConverterMap = new HashMap<String, String>();  
  static {  
    defaultConverterMap.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP);  
    defaultConverterMap.put("d",DateConverter.class.getName());  
    defaultConverterMap.put("date",DateConverter.class.getName());  
    defaultConverterMap.put("r",RelativeTimeConverter.class.getName());  
    defaultConverterMap.put("relative",RelativeTimeConverter.class.getName());  
     ...  

现在只需在这个static方法快里加上一句:


defaultConverterMap.put("ip",IpConvert.class.getName());

即可。”ip”是转换的字符,IpConvert是上面定义的转换器类。但如何添加进去呢?下面便是一种实现方案:

首先,定义一个类,该类继承PatternLayout.java:


import ch.qos.logback.classic.PatternLayout;  
public class MyPatternLayout extends PatternLayout {  
    static {  
        defaultConverterMap.put("ip",IpConvert.class.getName());  
    }  
}  

直接调用父类的属性,将自定义的转换符添加进去。IpConvert便是上面已实现的转换器。

之后,便是在logback.xml中配置我们自定义的PatternLayout:


<!-- 日志输出格式 -->  
<layout class="com.hjx.log4j.MyPatternLayout">  
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %ip [%thread] %-5level %logger{36} -%msg%n</Pattern>  
</layout>  

原先的layout的class类为”ch.qos.logback.classic.PatternLayout”,这里换成我们自定义的即可。

通过上述两种方案,便可实现自定义模板的功能。这种功能使用的一种场景便是在集群的环境下进行日志的分析,通常分析异常日志的时候,并不能准确定位到底是哪台主机上的哪个server出了错,如果添加了ip地址信息到日志中去,那么日志分析工作讲会变得更加准确高效。

如果有类似于监控平台这样的系统,那么便可将所有的异常日志统一进行分析,只需在输出中定义一些类似于主机ip、系统应用id之类的区别的变量,这样处理的好处自然不言而喻。

以下是我实际用到logback的配置


<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 配置IP地址 -->
    <conversionRule conversionWord="ip" converterClass="com.xyk.util.log4j.IpConvert" />
    <!-- Console 输出格式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%date{yyyy-MM-dd HH:mm:ss} %boldGreen(%ip) | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n"/>

    <!-- 文件输出格式 -->
    <property name="FILE_LOG_PATTERN"
              value="===%d{yyyy-MM-dd HH:mm:ss.SSS} %ip %-5level %logger Line:%-3L - %msg%n"/>

    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                ${CONSOLE_LOG_PATTERN}
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>

    <!--
       说明:
       1、日志级别及文件
           日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中
           例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
           日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名
           例如log-level-2013-12-21.0.log
           其它级别的日志也是如此。
       2、文件路径
           若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
           若部署到Tomcat下,则在Tomcat下的logs文件中
       3、Appender
           FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
           FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名
           FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
           FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名
           stdout将日志信息输出到控制上,为方便开发测试使用
    -->
    <contextName>SpringBootDemo</contextName>
    <property name="LOG_PATH" value="log/" />
    <!--设置系统日志目录-->
    <property name="APPDIR" value="pay-server" />

    <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
            而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
            命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录error级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
            而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
            命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 日志记录器,日期滚动记录 -->
    <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
            而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
            命名日志文件,例如log-error-2013-12-21.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 追加方式记录日志 -->
        <append>true</append>
        <!-- 日志文件的格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <logger name="org.springframework" level="WARN" />
    <logger name="org.hibernate" level="WARN" />

    <!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 -->
    <!--这里改level 生产环境改成ERROR 开发环境为INFO-->
    <root level="INFO">
        <appender-ref ref="FILEERROR" />
        <appender-ref ref="FILEWARN" />
        <appender-ref ref="FILEINFO" />

        <!-- 生产环境将请stdout,testfile去掉 -->
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

输出的日志为:

这里写图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: logback 自定义Pattern模板教程

本文链接: https://lsjlt.com/news/131139.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • logback 自定义Pattern模板教程
    配色板 "%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray","%...
    99+
    2024-04-02
  • IDEA创建自定义模板图文教程
    IDEA创建自定义模板 1.项目目录任意一处 右键 > 新建 > 编辑文件模板 2.点击加号创建模板 3.设置名称(如:XML File,Servlet File),...
    99+
    2024-04-02
  • c++模板自定义数组
    目录1.自定义数组.hpp--文件2.测试文件前言: 制造通用模板,创建自定义的数组, 一个数组,里面有这么几个属性,数组容量,数组元素个数,数组本身内存地址,这几个数据都是定义私有...
    99+
    2024-04-02
  • IntelliJ IDEA自定义代码提示模板Live Templates的图文教程
    打开 File --> Settings --> Editor --> Live Templates 此处添加Java的Live Templates 在Abb...
    99+
    2024-04-02
  • 想要自己的专属代码模板?一文教你自定义Android Studio代码模板!
    背景我们知道,在Android开发中,官方提供了很多模板,可以直接创建成套的代码,很是方便开发...
    99+
    2023-06-04
  • .NET Core自定义项目模板的全过程
    前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式——通过创建项目导出为项目模板方式实现。本次将采用dotenet cil(手脚架)来创建项目模板。 那么,我们首先看下当前do...
    99+
    2024-04-02
  • logback如何自定义日志存储
    目录logback自定义日志存储1、配置lockback.xml2、配置自定义日志操作类3、调用方法使用logback进行系统日志记录logback自定义日志存储 1、配置lockb...
    99+
    2024-04-02
  • C#自定义WPF中Slider的Autotooltip模板
    Slider控件有一个我比较喜欢的属性"AutoToolTip",可以在拖动的过程中显示当前刻度,然而这个刻度却不支持模板定制,并且就连自定义格式也不行。这就大大...
    99+
    2024-04-02
  • android编程实现的自定义注释模板实例
    本文实例讲述了android编程实现的自定义注释模板。分享给大家供大家参考,具体如下: 作为一名程序员 不仅要有一个写代码的能力,养成一个良好的编写习惯也是很重要的。今天给大家...
    99+
    2022-06-06
    自定义 模板 Android
  • SpringBoot应用自定义logback日志详解
    目录概述logback配置详解配置内容概念介绍配置介绍SpringBoot中自定义logback多环境输出日志文件读取配置文件配置概述 默认情况下,SpringBoot内部使用log...
    99+
    2024-04-02
  • 如何使用c++模板自定义数组
    这篇文章主要介绍了如何使用c++模板自定义数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言:制造通用模板,创建自定义的数组,一个数组,里面有这么几个属性,数组容量,数组...
    99+
    2023-06-29
  • Django自定义模板标签和过滤器
    1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py。 在这个模块中编写相关代码。 注意:templatetags所在APP应该在配置文件中...
    99+
    2023-01-31
    自定义 过滤器 模板
  • Mysql自定义安装教程
    一、首先得下载mysql下载地址  二、开始安装(我选择的是定义安装) 点击next 我的系统是64位的,所以选64,根据你自己的情况进行选择    点击ok  这一步得先安装c++,然后点击next  然后点击next  点击ne...
    99+
    2023-08-31
    sql mysql java
  • VS2019 自定义项目模板的实现方法
    前言: 使用“宇宙最强IDE”开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出、审计日...
    99+
    2024-04-02
  • 怎么在VSCode中自定义一个html5模板
    这篇文章给大家介绍怎么在VSCode中自定义一个html5模板,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。(一)新建html快捷键当我们想在VSCode中新建html代码时,可以 输入! 然后回车或者Tab即可自动生...
    99+
    2023-06-09
  • django-5-自定义模板过滤器及标签
    <<<代码布局(自定义的代码放哪里)>>> (1)某个app特有的   1.一般放app目录下 固定名为templatetags 的python文件夹里鸭,如果是别的名称,django是找不到的哦! ...
    99+
    2023-01-30
    自定义 器及 模板
  • 详解IntelliJ IDEA 自定义方法注解模板
    最近没啥事开始正式用Eclipse 转入 idea工具阵营,毕竟有70%的开发者在使用idea开发,所以它的魅力可想而知。刚上手大概有一天,就知道它为啥取名为 intelli(智能化)了,确实很智能,这还是一些小小的细节,当然idea也有它...
    99+
    2023-05-30
    intellij idea 注解
  • Android自定义PhotoView使用教程
    目录准备工作1、双击放大和缩小2、滑动和惯性滑动3、双指放大和缩小4、完整DEMO准备工作 自定义PhotoView 自定义 PhotoView 继承(extends)自 View。...
    99+
    2023-05-14
    Android PhotoView Android 自定义PhotoView
  • Java教程:JAVA自定义注解
    注解概念注解是Java SE 5.0版本开始引入的概念,它是对java源代码的说明,是一种元数据(描述数据的数据)。注解和注释的不同注释注释是对代码的说明,给代码的读者看,便于帮读者梳理业务逻辑;在程序代码中经常看到的以@ 开头的大部分是注...
    99+
    2023-06-02
  • Sleuth+logback 设置traceid 及自定义信息方式
    Sleuth+logback 设置traceid及自定义信息 背景: 分布式系统中,如何快速定位某个用户的请求日志? 使用Sleuth生成的traceid可以跟踪某个请求,但是很多时...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作