zoukankan      html  css  js  c++  java
  • logback扩展日志输出功能

    常用的日志输出框架除了log4j2,还有logback,它们都是出于同一作者,这里有一篇网友的介绍:

    https://www.cnblogs.com/ryelqy/p/10314147.html,同样,logback日志信息的处理扩展与log4j2

    相同,同样是将所有日志信息进行大写转换,步骤如下:

    1、利用idea开发工具创建一个空的Maven工程,工程名称随便填写,这里写为LogExtention

    2、选定LogExtention工程,右键创建一个module,名称记为common,用于定义功能类,这些功能类会处理日志信息,

    如下图:

     
     3、创建日志输出功能拓展工程模块logback-extend,创建过程同上,pom依赖内容如下:

    <dependencies>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
    </dependency>
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>
    <!--日志信息处理功能依赖-->
    <dependency>
    <groupId>org.example</groupId>
    <artifactId>common</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>compile</scope>
    </dependency>
    </dependencies>

    同样需要定义一个功能拓展类,需要继承MessageConverter类,定义如下:
    package logback.extend;

    import ch.qos.logback.classic.pattern.MessageConverter;
    import ch.qos.logback.classic.spi.ILoggingEvent;
    import common.fun.CommFun;

    public class LogbackExtend extends MessageConverter {
    @Override
    public String convert(ILoggingEvent event) {
    String oriLogMsg = event.getFormattedMessage();
    if (oriLogMsg!=null) {
    return CommFun.convert(event.getFormattedMessage());
    } else {
    return null;
    }
    }
    }
    这里CommFun.convert是我们在common模块中定义的功能函数,可以对msg做一些特殊处理。程序结构如下图:

     以上模块定义完毕后,对日志信息扩展处理功能算是完毕,下一步就是功能引用。

    4、创建一个logTest模块,为了打印方便起见,引入spring-boot-starter-web,这样我们在resources中定义的

    logback-spring.xml配置文件会直接被系统解析到,logTest模块的pom依赖如下:

    <dependencies>
    <!--日志拓展模块-->
    <dependency>
    <groupId>org.example</groupId>
    <artifactId>logback-extend</artifactId>
    <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--springboot模块-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.4.RELEASE</version>
    <exclusions>
    <exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    </dependencies>

    然后在resources文件夹下创建logback-spring.xml配置文件,文件内容定义如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="10 seconds">
    <!--定义扩展规则-->
    <conversionRule conversionWord="msg"
    converterClass="logback.extend.LogbackExtend" />
    <property scope="context" name="AppName" value="${APP_NAME}" />
    <property scope="context" name="ServerName"
    value="${SERVER_NAME}" />
    <property name="server.log.pattern"
    value="%msg%n" />
    <appender name="console"
    class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
    <pattern>${server.log.pattern}</pattern>
    </encoder>
    </appender>

    <root level="INFO">
    <!-- 日志输出到控制台 -->
    <appender-ref ref="console" />
    </root>
    </configuration>

    注意上面的conversionRule元素配置内容就是我们定义的logback-extend模块中的扩展类,上面的配置只是简单

    地将日志信息输出到控制台,然后创建一个简单的controller来输出日志内容,定义如下:

    package log.test;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    @RequestMapping
    public class Controller {
    Logger logger= LoggerFactory.getLogger(Controller.class);

    @GetMapping("/hello")
    public String hello(String str){
    System.out.println("msg before processing is "+str);
    logger.info(str);
    return str;
    }
    }
    以上定义完后,运行springboot启动类,在浏览器窗口中输入http://localhost:8080/hello?str=helloworld,
    会看到idea console控制台输入内容如下:

    msg before processing is helloworld
    msg after processing is HELLOWORLD

    说明整个配置已经生效了,这是一个logback扩展日志输出功能的最简版,如果需要对日志信息做特殊处理,则只需

    在common模块中追加功能即可。

     
  • 相关阅读:
    Alwayson常用脚本
    SQL Server 编译缓存相关的知识点
    Alwayson 常用视图
    Analysis Services PowerShell
    visible:hidden和dispaly:none的区别
    问题:做EsayUI分页报错 $(...).pagination is not a function之后我把<jsp:include page="top.jsp"/>去掉就好了,有大神知道为什么吗?另外分页按键放在那里好些,我放到form表单下,就开始显示,点一下后就没有了
    MyBatis:统计数量(查询所有)
    attr与prop的区别
    JAVA_OPTS
    JVM参数设置
  • 原文地址:https://www.cnblogs.com/codeMedita/p/15203256.html
Copyright © 2011-2022 走看看