logback异步日志

一、为什么使用异步日志Why

为提高程序性能,尽量默认都使用异步日志,如果不使用,可能日志在打包的时候,会占用大量磁盘IO和CPU,导致程序性能下降

二、依赖

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.20</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.7</version>
        </dependency>

注意:log4j-over-slf4j 和 slf4j-log4j12会循环引用,导致内存溢出。

三、logback配置文件结构,重点是<appender/> <logger/> <root/>

1、根节点<configuration>,scan重新加载,检查时间,打印logback状态信息,一般不设置属性

<configuration scan="true" scanPeriod="60 seconds" debug="false"></configuration>

2. 设置上下文名称:<contextName>myAppName</contextName>,一般不设置

3. 设置变量: <property name="APP_Name" value="myAppName" />,通过<property>定义的值会被插入到logger上下文中

4. 获取时间戳字符串:<timestamp key="bySecond" datePattern="yyyyMMdd‘T‘HHmmss"/>,一般不设置

5. <appender>, 是负责写日志的组件,<appender>有两个必要属性name(名称)和class(如何打印日志)

常用class:ConsoleAppender(打印日志到控制台)/RollingFileAppender(滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件)

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">    <layout class="ch.qos.logback.classic.PatternLayout">        <pattern>${COMMON_PATTERN}</pattern>    </layout></appender>
<appender name="abc-log" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logs/abc.log</File>
        <encoder>
            <pattern>${COMMON_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/abc.%d{yyyy-MM-dd}.log.zip</FileNamePattern>
            <MaxHistory>7</MaxHistory>
            <CleanHistoryOnStart>true</CleanHistoryOnStart>
        </rollingPolicy>
</appender>

6.<logger>,设置日志打印级别以及通过指定<appender>

name: 用来指定受此loger约束的某一个包或者具体的某一个类。

level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF

addtivity: 是否向上级loger传递打印信息。默认是true,如果传递有可能打印多次,一般设置为false

子节点<appender-ref>:实际指向<appender>

<logger name="aaa" level="TRACE" additivity="false">
        <appender-ref ref="trace-async-appender"/>
        <appender-ref ref="console"/>
</logger>

6. <root>,也是<logger>元素,但是它是根logger,只有一个level属性,一般是WARN级别往上

<root level="WARN">
        <appender-ref ref="console"/>
        <appender-ref ref="abc-log"/>
</root>

7. 异步打印日志,先把日志写入阻塞队列,然后才写到磁盘上

<appender-ref>实际指向<appender>,把原来的同步打日志的<appender>再包一层,因为异步日志并不自己打日志,而是提供一种方式,所以必须要具体到某个appender上

8. 屏蔽某个包的日志

<logger name="packageName" level="OFF"></logger>

9. 例子

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_DIR" value="logs"/>
    <property name="COMMON_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{0} - %msg%n"/>

    <!-- - - - - - - - appender - - - - - - -  -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${COMMON_PATTERN}</pattern>
        </layout>
    </appender>

    <appender name="abc-log" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>logs/abc.log</File>
        <encoder>
            <pattern>${COMMON_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>logs/abc.%d{yyyy-MM-dd}.log.zip</FileNamePattern>
            <MaxHistory>7</MaxHistory>
            <CleanHistoryOnStart>true</CleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <appender name="trace-async-appender" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="abc-log"/>
    </appender>

    <logger name="aaa" level="TRACE" additivity="false">
        <appender-ref ref="trace-async-appender"/>
        <appender-ref ref="console"/>
    </logger>

    <root level="WARN">
        <appender-ref ref="console"/>
        <appender-ref ref="abc-log"/>
    </root>
</configuration>

参考:

https://www.jianshu.com/p/86d04190304e

原文地址:https://www.cnblogs.com/june0816/p/6474569.html

时间: 2024-10-04 09:46:21

logback异步日志的相关文章

Log4j,Log4j2,logback,slf4j日志学习

日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE.DEBUG.INFO.WARN.ERROR.FATAL.OFF.如果配置为OFF级别,表示关闭log. Log4j支持两种格式的配置文件:properties和xml.包含三

异步日志

[z]https://www.jianshu.com/p/9f0c67facbe2 简介 Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems

Spring Boot 使用 Log4j2 &amp; Logback 输出日志到 EKL

文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK 是 Elasticsearch , Logstash, Kibana 的缩写,Elasticsearch 是开源分布式搜索引擎,提供搜集.分析.存储数据等功能,Logstash 主要是用来日志的搜集.分析.过滤日志的工具,Kibana 为 Elasticsearch 提供分析和可视化的 Web 平台

log4j 异步日志问题分析

1. 常用的DailyRollingFileAppender与RollingFileAppender是否同步? 1.1 代码分析 2. log4j 1.2.x提供了异步appender是什么?AsyncAppender 2.1 AsyncAppender配置 2.2 AsyncAppender分析 3. log4j 2.x 异步日志问题的解决方案及分析 3.1 log4j 2.x 异步日志问题的解决方案 3.2 log4j 2.x 异步日志性能高的关键 1. 常用的DailyRollingFil

记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引

先说背景,由于本人工作需要创建很多小应用程序,而且在微服务的大环境下,服务越来越多,然后就导致日志四分五裂,到处都有,然后就有的elk,那么问题来了 不能每个小应用都配置一个 logstash 服务来传输日志吧,把所有的日志都 输送到一个logstash里面  然后logstash会都输送到一个索引下(之前不知道怎么配),输送到同一个所以下 那么问题又来了,首先每个小服务程序日志量不大希望持续监控,也不需要用时间来分割(因为日志量不大),又希望查询方便(不要告诉我查询的时候多一个筛选条件就可以了

异步日志实现

上周发来个运营需求:服务器得接收各类运营消息,并记录下来(二进制文件.入库). 我们的消息处理是单线程轮询取队列的方式,如在响应函数中直接调IO等耗时操作,整个处理线程都会被阻塞.所以设计了这个异步日志模块.核心代码如下: //如果写得非常快,瞬间把两片buf都写满了,会阻塞在awakeChan处,等writeLoop写完log即恢复 //两片buf的好处:在当前线程即可交换,不用等到后台writeLoop唤醒 func (self *AsyncLog) Append(pdata []byte)

logback debug 日志没有信息

可能是项目绑定的日志不是logback的jar包,而是其他包,具体可查看tomcat启动日志 log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2

Log4j2中的同步日志与异步日志

1.背景 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式. 2.Log4j2中的同步日志 所谓同步日志,即当输出日志时,必须等待日志输出语句执行完毕后,才能执行后面的业务逻辑语句. 下面通过一个例子来了解Log4j2中的同步日志,并借此来探究整个日志输出过程. log4j2.xml配置如下: <?xml version="1.0" encoding="UTF-8"

IDEA项目搭建九——使用slf4j和logback进行日志记录

.简介 java里面日志分为两部分一个门面.一个实现,我们所熟知的SLF4j.Log4j.Log4j2.Logback的日志组件slf4j是门面提供的统一的入口,具体实现由log4j.log4j2.logback来实现 log4j由于太老作者自己也不打算重构了所以放弃 log4j2是apach的一个项目很好,但支持上面略有欠缺所以放弃 logback是之前log4j的作者自己开源的一个新的log组件,做了大量的调整及优化,性能及使用性上都有很大的提高,再加上沉淀了很多年又完全实现了slf4j,所