一.日志模块首先日志在我们开发过程中占据了一个非常重要的地位,是开发和运维管理之间的桥梁,在Java中的日志框架也非常多,Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口也都不尽相同,为了统一这些工具,MyBatis定义了一套统一的日志接口供上层使用。如果要看懂首先对于适配器模式要了解下1.1 LogLog接口中定义了四种日志级别,相比较其他的日志框架的多种日志级别显得非常的精简,但也能够满...
对于开源的项目来说的好处就是我们遇到什么问题可以通过看源码来解决。比如近期有个同事问我说,为啥JdbcTemplate中只有在Error的时候才打印出sql语句呢。我一想,这和log的配置有关系吧。 我们的系统中使用了slf4j作为日志管理工具,之前也好像看到过项目工程中配置的日志级别是error的,所以当代码错误时打印出sql语句应该也属于正常。但是想要正常运行时也打印出sql语句,相比和配置有关,但是应该配置那个级别呢? 应该要看下J...
读取命名空间镜像和编辑日志数据1.读取命名空间镜像类FSImage是 命名空间镜像的java实现,在源码中,英文注释为,/*** FSImage handles checkpointing and logging of the namespace edits.**/FSImage.loadFSImage(FSNamesystem, StartupOption, MetaRecoveryContext) 读取命名空间镜像。 1privateboolean loadFSImage(FSNamesystem target, StartupOption startOpt,2 MetaRecoveryContext recove...
public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)2 throws DataAccessException {3 4 Assert.notNull(psc, "PreparedStatementCreator must not be null");5 Assert.notNull(action, "Callback object must not be null");6 if (logger.isDebugEnabled()) {7 String sql = getSql(psc);8 logger.debug("Executing prepared...
上一篇我们详细分析了 源码分析RocketMQ多副本之Leader选主,本文将详细分析日志复制的实现。 有了前篇 源码分析 RocketMQ DLedger 多副本存储实现,本文将直接从 Leader 处理客户端请求入口开始,其入口为:DLedgerServer 的 handleAppend 方法开始讲起。 1、日志复制基本流程在正式分析 RocketMQ DLedger 多副本复制之前,我们首先来了解客户端发送日志的请求协议字段,其类图如下所示: 我们先一一介绍各个字段的含义:String g...
Log::info(测试); Log是一个门面 本质类是Logmanager 门面就是门面 就是代理 本质上 没有任何内在的东西 public function info($message, array $context = []){$this->driver()->info($message, $context);}$this->driver()这个返回的是 \Psr\Log\LoggerInterface 这里返回的是laravel 自己的Logger 也就是这个Illuminate\Log\Logger 但是这个类 又依赖monolog实例 所以啊 感觉 Illuminate\Log\Logger 这个类 也是过滤啊...
DolphinScheduler源码分析之任务日志 任务日志打印在调度系统中算是一个比较重要的功能,下面就简要分析一下其打印的逻辑和前端页面查询的流程。 AbstractTask 所有的任务都会继承AbstractTask,这个抽象类有一个比较重要的字段就是logger,其实也就是一个org.slf4j.Logger对象。 也就是说所有的任务都是通过slf4j打印日志的。那这个logger是如何创建的呢? Logger taskLogger = LoggerFactory.getLogger(LoggerUtils.buildTaskId(...
public class Test {public static void main(String args[]) {System.out.println("++++++++++++++++++ BEGIN ++++++++++++++++++");int i = 1;while(true) {System.out.println(String.format("## %3d ##", i));if (i == 10) {break;}try {Thread.sleep(1000);} catch (Exception e) {System.out.println(e.getMessage());}i++;}System.out.println("++++++++++++++++++ END ++++++++++++++++...