slf4j

Logback: how to log only errors to file

蓝咒 提交于 2020-05-09 19:51:25
问题 I've been reading the logback manual for 2 hours and still can't figure how to do what I need. It is as simple as the title says: I want to log only the errors to a file, and the other levels (including ERROR) to console. This is the root section of my logcat.xml file: <root level="TRACE" > <appender-ref ref="CONSOLE_APPENDER" /> <appender-ref ref="FILE_APPENDER" /> </root> The problem with this configuration is that it logs every level >= TRACE to both appenders. I could let the root with

scala和java混合开发打包

人盡茶涼 提交于 2020-05-09 14:46:10
如何进行scala和java混合开发打包? 首先创建maven工程,在pom.xml添加一下依赖 <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> <slf4j-api.version>1.6.4</slf4j-api.version> <commons-lang3>3.1</commons-lang3> <scala.version>2.11.8</scala.version> <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> <!-- log API --> <dependency> <groupId>org.slf4j<

SpringBoot进阶教程(五十)集成RabbitMQ---MQ实战演练

ε祈祈猫儿з 提交于 2020-05-08 21:07:07
RabbitMQ是一个在 AMQP 基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License 开源协议 。RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。 消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息. 如果你还没有安装rabbitmq的,可以看看这篇 《centos安装MQ》 不说了不说了,来一张图直截了当的看看MQ工作的具体过程: 开局一张图 故事全靠编.从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息队列,并且当消息队列收到消息之后,接收消息队列传来的消息,并且给予相应的处理.消息队列常用于分布式系统之间互相信息的传递. v 基础概念 对于RabbitMQ来说,除了这三个基本模块以外,还添加了一个模块,即交换机(Exchange).它使得生产者和消息队列之间产生了隔离,生产者将消息发送给交换机,而交换机则根据调度策略把相应的消息转发给对应的消息队列.那么RabitMQ的工作流程如下所示: 关于rabbitmq几个基础名词的介绍: Broker: 简单来说就是消息队列服务器实体。 Exchange: 消息交换机

Java 开发手册 (阿里巴巴开发手册)

ε祈祈猫儿з 提交于 2020-05-08 19:01:05
Java 开发手册 版本号 制定团队 更新日期 备注 1.4.0 阿里巴巴集团技术团队 2018.5.20 增加设计规约(详尽版) 一、编程规约 (一) 命名风格 1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $name / name_ / name$ / name__ 2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式 也要避免采用。 正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。 反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3 3. 【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。 正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion 4. 【强制】方法名

接口测试笔记二

落爺英雄遲暮 提交于 2020-05-08 16:46:45
上一篇 接口测试笔记一 为什么开发测试框架?   测试工具的局限性   维护成本的增加 这里使用python,也可以选用自己熟悉的语言 1.安装requests pip install requests 2.基本请求 get请求,getTest.py import requests url_index = ' http://127.0.0.1:8081/api/files/detail?id=1 ' response_index = requests.get(url_index) print ( ' Response 内容: ' +response_index.text) post请求 需要通过 Body 传递参数 postTest.py import requests url_search = ' http://127.0.0.1:8081/api/files/searchByIds ' # 拼凑 body 的参数 payload = { ' ids ' :(None, " 1,2 " ) } # 调用 requests 类的 post 方法,也就是 HTTP 的 POST 请求方式, # 访问了 url_search,其中通过将 payload 赋值给 data 完成 body 传参 response_search = requests.post(url_search,

SpringBoot整合WebSocket

独自空忆成欢 提交于 2020-05-08 16:00:47
一、WebSocket概述 Http协议是一种基于请求/响应的应用层协议,工作原理是客户端(浏览器)与服务端建立TCP连接->客户端向服务端发送http请求报文->服务端收到请求报文进行处理返回一个响应报文->释放TCP连接->浏览器解析响应报文进行渲染。整个过程中都是由客户端发起的,服务端被动反应。如果我们需要实时获取服务器数据,可以通过ajax轮询来实现,不停的进行请求/响应,不停的建立TCP连接,这就造成的资源的极大浪费,而且做不到服务端向客户端发送信息。 由此诞生了websocket协议,最大的特点就是服务端可以主动向客户端发送信息,客户端也可主动向服务端发送信息,是一个双向平等的协议。工作原理是首先使用http建立一个TCP连接并告诉服务器将http协议升级为websocket协议此时就建立了一个持久连接->此时如果服务器由信息输出则直接传输给客户端,客户端不再询问知道客户端关闭连接为止。 二、SpringBoot整合WebSocket 1、导入pom.xml依赖 < dependency >    < groupId > org.springframework.boot </ groupId >    < artifactId > spring-boot-starter-websocket </ artifactId > </ dependency > 2

基于Guava RateLimiter实现限流

自闭症网瘾萝莉.ら 提交于 2020-05-08 12:24:27
Guava RateLimiter 客户端限流 (单机版本) <dependency> <groupId> com.google.guava </groupId> <artifactId> guava </artifactId> <version> 18.0 </version> </dependency> import com.google.common.util.concurrent.RateLimiter ; import lombok.extern.slf4j. Slf4j ; import org.springframework.web.bind.annotation. GetMapping ; import org.springframework.web.bind.annotation. RestController ; import java.util.concurrent.TimeUnit ; /** * RateLimiter 只能存在单机项目 */ @RestController @Slf4j public class RateLimiterController { //每一秒2个令牌限流 RateLimiter limiter = RateLimiter. create ( 2.0 ) ; /** * 非阻塞限流 * * @param count 每秒消耗令牌

spring boot 2 内嵌Tomcat 抛出异常 “Stopping service [Tomcat]”

末鹿安然 提交于 2020-05-08 11:50:21
我在使用springboot时,当代码有问题时,发现控制台打印下面信息: Connected to the target VM, address: '127.0.0.1:42091' , transport: 'socket' log4j:WARN No appenders could be found for logger (org.springframework.boot.devtools.settings.DevToolsSettings). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | ' _| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :

【实践】切面打印请求参数

非 Y 不嫁゛ 提交于 2020-05-08 09:42:38
加打印语句,将请求参数打印出来。后面想想,以后可能还会遇到这样的情况,如果每次遇到,我都去对应的方法中加日志打印,就变成重复工作。并且日志打印跟我们的业务本身没有任何关系。 记录日志网上主要有三种方法: aop filter interceptor 我选择了filter。为什么选择它,因为我觉得它相对于定义切点,然后切点前后处理来说,更加方便;相对于 interceptor, 我更加熟悉这种方式。 定义Filter 定义一个 LogFilter 。 里面对 HttpServletRequest 进行拦截,根据对应的 content-type 解析请求参数。主要代码如下 /** * 功能描述: 打印请求参数 * @author lkb * @date 2020/5/6 * @param * @return */ @Slf4j public class LogFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // 日志 doLog

java中的内部类内部接口详解

只愿长相守 提交于 2020-05-08 06:53:45
简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口。 内部类 先讲内部类,内部类就是在类中定义的类。类中的类可以看做是类的一个属性,一个属性可以是static也可以是非static的。而内部类也可以定义在类的方法中,再加上匿名类,总共有5种内部类。 静态内部类 我们在class内部定义一个static的class,如下所示: [@Slf4j](https://my.oschina.net/slf4j) public class StaticInnerClass { static class Inner { void print() { log.info("Inner class is: " + this); } } public static void main(String[] args) { StaticInnerClass.Inner inner = new StaticInnerClass.Inner(); inner.print(); } } 因为static变量可以直接根据类名来存取,所以我们使用new StaticInnerClass.Inner()来实例化内部类。 非静态内部类 class中定义的类也可以是非静态的