logback

logback源码阅读-获取Logger(二)

不羁的心 提交于 2020-04-08 13:41:26
类图 前面代码看出来 最终返回的是LoggerContext这个类实现了LogFactory 成员变量 //表示根logger final Logger root = new Logger("ROOT", (Logger)null, this); //标识创建了多少个logger private int size; //未知 private int noAppenderWarning = 0; //<1>接口的实例能监听 logger context 上发生的事件,比如说日志级别的变化 private final List<LoggerContextListener> loggerContextListenerList = new ArrayList(); //logger缓存 get一次会存入缓存同时size++下次直接从缓存拿 private Map<String, Logger> loggerCache = new ConcurrentHashMap(); //loggerContextVO对象 private LoggerContextVO loggerContextRemoteView = new LoggerContextVO(this); private final TurboFilterList turboFilterList = new

性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题

非 Y 不嫁゛ 提交于 2020-04-06 02:32:34
作者 | [张奇(司楚)] 当线上碰到头疼的问题时,还在对着代码一行行的看?真的不太时髦了啊喂~ 俗话说的好 “问题排查不用愁,Arthas 来帮您忙。” 今天就来说说这个让妈妈再也不用担心我排查问题的 Java 诊断神器——Arthas! 什么是 Arthas? Arthas 是一款开源在线诊断工具,采用命令行交互模式,支持 web 端在线诊断,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。这是一款开源一年多 GitHub star 2 万,99% 的阿里研发小哥都在用的 Java 终极诊断利器!相对比直接下载使用,我推荐开发者可以试一下通过 IDE插件 Cloud Toolkit 中使用Arthas 来实现一键远程诊断功能。 得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。下面仅仅列举几项常见的使用情况,更多的使用场景可以在熟悉了 Arthas 之后自行探索。 是否有一个全局视角来查看系统的运行状况? 为什么 CPU 又升高了,到底是哪里占用了 CPU ? 运行的多线程有死锁吗?有阻塞吗? 程序运行耗时很长,是哪里耗时比较长呢?如何监测呢? 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug

Spring boot druid 的配置使用

雨燕双飞 提交于 2020-03-31 04:04:23
依赖加入 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.18</version> </dependency>    YML spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8 username: root password: 12345678 # druid 配置 dbType: mysql # 指定数据库类型 mysql initialSize: 5 # 启动初始化连接数量 minIdle: 5 # 最小空闲连接 maxActive: 20 # 最大连接数量(包含使用中的和空闲的) maxWait: 60000 # 最大连接等待时间 ,超出时间报错 timeBetweenEvictionRunsMillis: 60000 # 设置执行一次连接回收器的时间 minEvictableIdleTimeMillis: 300000 # 设置时间: 该时间内没有任何操作的空闲连接会被回收 validationQuery: select

java日志:slf4j

久未见 提交于 2020-03-28 09:26:26
一、设计模式之门面模式(facade) 1. 概念:外部与子系统的通信,必须通过统一的外观对象(facade)进行,使得子系统更易于使用 2. 模式图 3. 核心点: a. 知道所有子角色的功能和责任 b. 将客户端发来的请求,委派到子系统中,门面对象没有实际的业务逻辑 c. 不参与子系统内业务逻辑的实现 二、slf4j概述 1. slf4j是门面模式的典型应用,因为一个系统中可能有其他jar包,使用了logback, log4j, slf4j等不同的日志系统,需要引入一个适配层去决定使用哪种日志系统 2. slf4j只是一个日志标准,并不是日志系统的具体实现:提供日志接口、提供获取具体日志对象的方法 3. slf4j的具体实现:slf4j-simple, logback, slf4j-log4j12 三、应用:使用slf4j+logback 1. 添加依赖 <dependency> // slf4j <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> // logback实现slf4j <groupId>ch.qos.logback</groupId> <artifactId>logback

自定义一个logback的MessageConverter

两盒软妹~` 提交于 2020-03-27 17:54:04
3 月,跳不动了?>>> 起因   读罢Hollis大神的 自定义一个logback的MessageConverter ,我久久不能平静,这么好的东西!为什么不加到我的项目中来呢?说时迟,那时快,我添加了日志转换器,但是同事抱怨说,本来正常的 JSON 字符串输出变得有斜杠了。我一瞅,这!有点尴尬,我安慰同事说:“我加个判断,马上搞定。” 我的代码 /** * logback json格式日志转换工具 * * @author hengbao */ public class ArgumentJsonFormatLayout extends MessageConverter { @Override public String convert(ILoggingEvent event) { try { return MessageFormatter.arrayFormat(event.getMessage(), Stream.of(event.getArgumentArray()).map(argument -> { Class<?> aClass = argument.getClass(); if (aClass.equals(String.class)) { // 如果是字符串则直接输出 return argument; } if (aClass.equals(JSONObject

Spring Boot 与 Logback 日志配置

[亡魂溺海] 提交于 2020-03-27 02:13:25
3 月,跳不动了?>>> 本文记录 SpringBoot 与 Logback 是如何工作的,即观察 SpringBoot 中 Logback 是怎么一步一步初始化的。用以测试的 SpringBoot 版本是 1.5.16, 而非最新的 SpringBoot 2。关于 SpringBoot 日志的官方文档在 Logging , 但不太详细或透彻。本文也不承诺说就理解得更有深度,只是为官方文档提供更多方面的参考。 SpringBoot 默认使用 Slf4J + Logback 来记录日志,对于一个基本的依赖于 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> 的 Spring Boot 项目,上面组件依赖了 spring-boot-starter-logging 组件,而该组件又引入了以下几个依赖 logback-classic: 依赖了 Slf4J jcl-over-slf4j jul-to-slf4j log4j-over-slf4j 相当于把其他的日志框架全桥接到了 Slf4J + Logback 上去了。 阅读全文 >> 来源: oschina 链接: https://my.oschina.net

logback的配置

假如想象 提交于 2020-03-26 11:17:17
log back 是log4j的豪华升级版,项目中一般使用Log Back 作日志打印 一、组件介绍 Logger : 日志记录器,在Logger上可以定义日志记录的级别,类型等! Appender : 日志追加器,只要定义日志输出的目的地,输出到控制台还是到文件还是到其他的进程等!        通常必须传入name(appender的名称,可以自定义),class(append的实现类,可以使用系统的实现类或用自己定义的实现类) Layout : 日志的样式!日志会参照layout的格式,进行格式化输出! 二、配置实例 在项目的resources 目录下创建logback.xml文件 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 --> <property name="LOG_HOME" value="/tmp/logs/" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder

Spring boot 2 + log detail logs do not work, with Logback, Hibernate + Weblogic

左心房为你撑大大i 提交于 2020-03-25 16:54:09
问题 I use oracle 11.x , Spring boot 2.x , maven , weblogic – as external server. The entry point @SpringBootConfiguration @SpringBootApplication public class WebSpringBootJarApplication extends SpringBootServletInitializer implements WebApplicationInitializer { private static final Logger LOGGER = LoggerFactory.getLogger( WebSpringBootJarApplication.class ); public static void main(String[] args) { SpringApplication.run(WebSpringBootJarApplication.class, args); LOGGER.info("Start an application..

依赖冲突解决办法

倖福魔咒の 提交于 2020-03-25 14:54:43
3 月,跳不动了?>>> maven 的价值 Java开发中,jar的管理由maven来管。maven做的事情: jar 统一管理: jar 包统一管理在仓库中。统一管理自然要给每个jar包进行“编址”,它主要采用 groupId+artifactId+version三级寻址方案(当然也有classifier)。统一管理带来好处的同时,带来了麻烦,麻烦是仓库是“单点”,为了避免这个瓶颈,maven 客户端配置可以支持镜像仓库(mirrors)机制。 依赖传递: 当我们的程序依赖A,我们引用A就好;但是实际上A又依赖B和C,我们不用再琐碎的依赖B和C了,这个maven会解析A中的pom.xml,并传递的拉取子级依赖。 “依赖传递”让开发者省去很多琐碎的心思。但它方便的同时,可能带来一些麻烦——依赖冲突。 依赖冲突 所谓“依赖冲突”如下图所示: 依赖冲突.jpg 图中,我们的程序依赖A,那么我们在pom.xml中配置: < dependency > < groupId > org.example </ groupId > < artifactId > A </ artifactId > < version > ${version} </ version > </ dependency > 实际上,A它依赖B和C (这个在A的pom.xml中会有描述)。B再依赖X和Y;C依赖Y和Z