当前位置: 首页 > news >正文

spring boot start log4j2 开启异步

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

springboot项目使用log4j2,正常引入以下依赖:

<!-- Exclude Spring Boot's Default Logging 如果把logging移除了,idea打印的貌似就不是彩色的了。 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<!-- Add Log4j2 Dependency -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

spring如果扫描到有一个名字叫做log4j2.xml or log4j2.json or log4j2.yaml在classpath下,就会自动配置好了。

本文使用log4j2.xml格式文件,看下面最简单的示例;

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
        </Property>
    </Properties>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com.example.log4j2demo" level="debug" additivity="false">
            <AppenderRef ref="ConsoleAppender" />
        </Logger>

        <Root level="info">
            <AppenderRef ref="ConsoleAppender" />
        </Root>
    </Loggers>
</Configuration>

在代码中使用:

package com.example.log4j2demo;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Log4j2DemoApplication implements ApplicationRunner {
    private static final Logger logger = LogManager.getLogger(Log4j2DemoApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(Log4j2DemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        logger.debug("Debugging log");
        logger.info("Info log");
        logger.warn("Hey, This is a warning!");
        logger.error("Oops! We have an Error. OK");
        logger.fatal("Damn! Fatal error. Please fix me.");
    }
}

如果项目有lombok库的,可以直接在类上声明@Slf4j

,如果你想把log写入log文件,就添加一个文件Appender:

<!-- Rolling File Appender -->
<RollingFile name="FileAppender" fileName="logs/log4j2-demo.log" 
             filePattern="logs/log4j2-demo-%d{yyyy-MM-dd}-%i.log">
    <PatternLayout>
        <Pattern>${LOG_PATTERN}</Pattern>
    </PatternLayout>
    <Policies>
        <SizeBasedTriggeringPolicy size="10MB" />
    </Policies>
    <DefaultRolloverStrategy max="10"/>
</RollingFile>

在Root节点配置:

<Root level="info">
    <AppenderRef ref="ConsoleAppender"/>
    <AppenderRef ref="FileAppender"/>
</Root>

添加使用发送邮件功能(自测一直没有发送成功!):

<!-- SMTP Appender -->
<SMTP name="MailAppender"
      subject="Log4j2 Demo [PROD]"
      to="youremail@example.com"
      from="log4j2-demo-alerts@example.com"
      smtpHost="yourSMTPHost"
      smtpPort="587"
      smtpUsername="yourSMTPUsername"
      smtpPassword="yourSMTPPassword"
      bufferSize="1">
    <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout>
        <Pattern>${LOG_PATTERN}</Pattern>
    </PatternLayout>
</SMTP>

如果要使用邮件需要引入:

<!-- Needed for SMTP appender -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

使用异步log:

log4j2内部使用的disruptor库实现异步:

<!-- Needed for Async Logging with Log4j 2 -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.6</version>
</dependency>

将所有logger都设置为异步,需要在启动参数,或者systemProperties添加:

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

例如:

java -jar target/log4j2-demo-0.0.1-SNAPSHOT.jar -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

同步异步混合使用,需要使用<AsyncLogger> 配置元素:

<Loggers>
    <AsyncLogger name="com.example.log4j2demo" level="debug" additivity="false">
        <AppenderRef ref="ConsoleAppender" />
        <AppenderRef ref="FileAppender" />
    </AsyncLogger>

    <Root level="info">
        <AppenderRef ref="ConsoleAppender" />
        <AppenderRef ref="FileAppender" />
    </Root>
</Loggers>

 

转载于:https://my.oschina.net/u/1024107/blog/1583864

相关文章:

  • java爬虫HttpURLConnect获取网页源码
  • Oracle 监听器无法启动(TNS-12537,TNS-12560,TNS-00507)
  • 开发微信小程序中SSL协议的申请、证书绑定、TLS 版本处理等
  • 422. 最后一个单词的长度
  • ansible分发密钥
  • JavaWeb-HttpServletResponse对象一
  • JS~模拟表单在新窗口打开,避免广告拦截
  • mysql分表经验总结
  • Lind.DDD.Messaging框架通讯组件介绍
  • 未完成.队列
  • vuex的使用
  • 21、PHP和python/JAVA比,哪个更好学?
  • word 2007每次打开总出现setup error
  • C# WinForm开发系列 - GDI+【转】
  • 【自用】 Kotlin 创建自己的对话框
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • IDEA 插件开发入门教程
  • java8-模拟hadoop
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Laravel 菜鸟晋级之路
  • Netty 4.1 源代码学习:线程模型
  • Node 版本管理
  • SpiderData 2019年2月25日 DApp数据排行榜
  • ViewService——一种保证客户端与服务端同步的方法
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • windows-nginx-https-本地配置
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一、python与pycharm的安装
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #《AI中文版》V3 第 1 章 概述
  • $L^p$ 调和函数恒为零
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (c语言)strcpy函数用法
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)Scala的“=”符号简介
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net6 Api Swagger配置
  • .NET开发人员必知的八个网站
  • /bin、/sbin、/usr/bin、/usr/sbin
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [ C++ ] 继承
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [C/C++]关于C++11中的std::move和std::forward
  • [C++]——带你学习类和对象
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [CISCN2019 华东南赛区]Web4
  • [CTO札记]盛大文学公司名称对联
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [DL]深度学习_Feature Pyramid Network
  • [Electron]ipcMain.on和ipcMain.handle的区别