package com.github.drinkjava2.jsqlbox;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* For log output
*
* @author Yong Zhu
* @version 1.0.0
* @since 1.0.0
*/
public class SqlBoxLogger {
private Object commonLogger;
private Method commonLoggerInfoMethod;
private Method commonLoggerErrorMethod;
private Logger jdkLogger;
public SqlBoxLogger(Class<?> targetClass) {
if (targetClass == null)
throw new AssertionError("SqlBoxLogger error: targetClass can not be null.");
try {
Class<?> logFactoryClass = Class.forName("org.apache.commons.logging.LogFactory");
Method method = logFactoryClass.getMethod("getLog", new Class[] { Class.class });
commonLogger = method.invoke(logFactoryClass, new Object[] { targetClass });
commonLoggerInfoMethod = commonLogger.getClass().getMethod("info", new Class[] { Object.class });
commonLoggerErrorMethod = commonLogger.getClass().getMethod("error", new Class[] { Object.class });
} catch (Exception e) {
SqlBoxException.eatException(e);
}
if (commonLogger == null)
jdkLogger = Logger.getLogger(targetClass.getName());
}
public static SqlBoxLogger getLog(Class<?> targetClass) {
return new SqlBoxLogger(targetClass);
}
public void info(String msg) {
if (jdkLogger != null) {
jdkLogger.log(Level.INFO, msg);
return;
}
try {
commonLoggerInfoMethod.invoke(commonLogger, new Object[] { msg });
} catch (Exception e) {
throw new AssertionError(e.getMessage());
}
}
public void error(String msg) {
if (jdkLogger != null) {
jdkLogger.log(Level.WARNING, msg);
return;
}
try {
commonLoggerErrorMethod.invoke(commonLogger, new Object[] { msg });
} catch (Exception e) {
throw new AssertionError(e.getMessage());
}
}
}
相关推荐
Debian 10 上手动部署 Apache Kafka 的完整实践指南
Apache Kafka 是一种分布式流处理平台,核心能力在于高吞吐、低延迟的消息发布与订阅。其运行依赖于稳定的 JVM 环境(如 OpenJDK 11)和强一致的协调服务(如 ZooKeeper),技术价值体现在微服务解耦、实时日志聚合与事件驱动架构支撑。典型应用场景包括金融风控数据管道、IoT 设备遥测接入及 Flink 实时计算的数据源。在 Linux 生产环境(如 Debian 10)中,Kafka 并无图形化 installer,必须通过二进制包手动部署,以保障版本可控、路径清晰与升级可追溯——这
java日志组件(2):common-logging
Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。
深入解析Apache Log4j2:异步日志、无垃圾回收与生产环境最佳实践
日志系统是软件可观测性的核心组件,它记录了程序运行的关键轨迹,是线上问题排查与系统监控的基石。其工作原理在于将程序运行时的状态、事件和异常信息结构化地输出到指定目的地。一个高效的日志框架能显著提升系统的可维护性和故障恢复能力,尤其在微服务、高并发等复杂应用场景中至关重要。Apache Log4j2作为新一代日志框架,通过其异步日志机制和LMAX Disruptor无锁队列,实现了极高的吞吐量与低延迟,有效解决了传统同步日志在高并发下的性能瓶颈。同时,其无垃圾回收模式通过对象池复用技术,大幅减少了临时对象创建
Class org.apache.commons.logging.impl.Jdk14Logger does not implement Log 解决方法
org.apache.commons.logging.LogConfigurationException: Class org.apache.commons.logging.impl.Jdk14Logger does not implement Log at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogF
Java日志框架实战指南:从SLF4J、Log4j2到生产环境配置
日志是软件系统可观测性的基础组件,其核心价值在于记录程序运行状态、辅助问题排查与系统监控。在Java生态中,日志体系通常采用三层架构设计:日志门面(如SLF4J)提供统一API,日志实现(如Logback、Log4j2)负责具体输出,桥接器解决历史框架兼容问题。这种架构实现了业务代码与具体日志实现的解耦,提升了系统的可维护性。从技术原理层面,异步日志、无锁数据结构等优化手段能显著提升高并发场景下的性能表现,而合理的日志级别设计、滚动归档策略则是保障生产环境稳定运行的关键。在实际工程实践中,日志系统需要与监控
SLF4J与Log4j2集成原理及生产级日志配置实战
日志框架是Java应用可观测性的基石,SLF4J作为统一门面接口,通过桥接器(binding)解耦日志API与具体实现,实现面向接口编程;Log4j2则凭借Disruptor异步架构、零GC对象复用和复合滚动策略,提供高性能、高可靠日志能力。其技术价值在于保障开发阶段的API稳定性与生产环境的I/O吞吐、磁盘可控、内存安全三重底线。典型应用场景涵盖微服务全链路追踪(MDC)、多环境差异化输出(Console/rolling)、敏感信息动态脱敏(StrLookup),以及Spring Boot等主流框架的日志
java.lang.ExceptionInInitializerError的解决办法
Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfi 当开发web工程时候会遇到莫名的诸如下列错误: java.lang.ExceptionInInitializerError 查看错误栈会发现报 Caused by: org.apache.comm...
Mac系统BurpSuite专业版配置全攻略:从Java环境到代理证书
中间人代理(MITM)是Web安全测试中的核心技术,通过在客户端与服务器之间拦截和修改网络流量,实现对HTTP/HTTPS通信的深度分析。其工作原理依赖于CA证书的安装与信任,从而建立可信的中间人通道。这项技术的核心价值在于能够动态检测SQL注入、XSS等常见Web漏洞,极大提升安全测试效率。在渗透测试和漏洞扫描场景中,BurpSuite作为集成化平台,将代理拦截、漏洞扫描、重放攻击等模块有机结合。本文聚焦于在macOS系统上,针对BurpSuite专业版部署过程中的Java环境配置、证书安装及代理设置等关
接口默认方法 && 接口静态方法 && 函数式接口
目录 接口默认方法 接口静态方法 函数式接口 接口默认方法 package com.tmooc.interfacedefaultandstaticmethod; import jdk.internal.instrumentation.Logger; import lombok.extern.slf4j.Slf4j; /** * @author cuitao * @ className:IntefaceDefaultMethod * @ description: * 接口...
java 两个项目之间的访问
java 项目和项目之间的访问
USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计
USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系
Commons 阅读笔记 之 Logging 篇
Apache组织开发了一套用于支持Logging的Log4J,Java 1.4版本也引入了一套内置的Logging框架,如果开发者想在这两套Logging系统之间自由的切换,该怎么办呢?答案就是,使用Commons Logging。Commons Logging定义了一套抽象的Logging接口,用户可以通过配置,使这些接口指向任何一个已存在的Logging系统。•使用抽象Logging接
宇树机器狗go2—slam建图(1)点云格式
上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目来进行不定期更新,仿真不只限于在gazebo上实现,后面还会在isaac sim等仿真平台上教大家如何搭建,其目的还是帮助各位都能以较低的成本加入到宇树机器狗go2的学习中。
Java日志框架核心原理:SLF4J门面与Log4j2实现深度解析
日志是Java应用可观测性的基石,其本质是一套标准化的事件记录与分级输出机制。SLF4J作为统一门面接口,解耦了日志API与具体实现(如Log4j2、Logback),通过绑定器(Binding)在运行时动态选择实现,实现面向接口编程。这种分层设计不仅提升可维护性,更支撑企业级日志治理——包括异步高性能写入、多维度上下文(MDC)、滚动归档与安全防护。Log4j2凭借LMAX Disruptor异步架构和CVE-2021-44228漏洞后的加固演进,成为高吞吐、强安全场景首选;而SLF4J的桥接机制则保障了
Android汽车服务篇(一) CarService
本文主要说明了CarService这一系统服务的启动流程,以及一些关键成员的创建和初始化流程.同时简单介绍了一下客户端是如何获取和使用CarService对象, 如上文介绍的, CarService对象只是获取各个Manager的媒介,它本身并不承担管理传感器.空调等具体的任务.如果要获取车辆的相关信息,如车速, 车内空调温度,诊断信息, 或对车辆进行相关的控制,如升高和降低空调温度,控制座椅和车窗, 调节音量等,就要通过具体的Manager中的API和对应的服务来实现了.
从设计到实战:手把手教你用SolidWorks完成一个简易离心泵叶轮的水力设计全流程
本文详细介绍了使用SolidWorks进行简易离心泵叶轮水力设计的全流程,涵盖参数计算、水力设计和三维建模等关键步骤。通过实际案例演示,帮助机械设计工程师和学生掌握从理论到实践的转化技巧,特别适合低比转速离心泵叶轮的设计需求。
Debian 10 上 Kafka 生产级部署:JVM调优、KRaft配置与systemd服务化
Apache Kafka 是一种高吞吐、低延迟的分布式流处理平台,其核心能力依赖于 JVM 运行时稳定性、网络与存储子系统协同,以及元数据管理机制。理解 Kafka 原理需从消息持久化(log.dirs)、副本同步(replication.factor)、控制器选举(controller.quorum.voters)等底层机制切入;技术价值体现在解耦生产消费、支撑实时数仓与事件驱动架构;典型应用场景包括日志聚合、IoT 数据管道、微服务异步通信及 CDC 流式同步。在 Debian 10 等未提供官方 Ka
【低空经济】无人机充电站设计方案
随着无人机技术的快速发展和广泛应用,其在物流、农业、巡检、救援等领域的应用日益普及。然而,无人机的续航能力一直是限制其大规模应用的关键因素之一。为了解决这一问题,无人机充电站的设计与建设显得尤为重要。本项目旨在设计一套高效、智能、可扩展的无人机充电站系统,以满足不同场景下无人机的充电需求,提升其作业效率和应用范围。无人机充电站的设计将围绕以下几个核心目标展开:首先,充电站应具备快速充电能力,以减少无人机的停机时间,提高作业效率;
Java 8项目如何借鉴JDK 21新特性:虚拟线程、记录类与GC优化实践
在Java开发领域,高并发处理、垃圾回收机制和代码简洁性一直是核心挑战。Java 8通过线程池与CompletableFuture应对并发,但面临资源浪费与回调地狱问题;其G1垃圾回收器在低延迟场景下存在停顿风险。JDK 21引入的虚拟线程以同步编码风格实现高并发性能,分代ZGC将暂停时间控制在毫秒级,记录类则大幅减少样板代码。这些特性虽无法直接用于Java 8,但通过优化线程池配置、采用Lombok @Value注解及精细化GC调优,能在现有版本中实现类似效果。本文聚焦虚拟线程与记录类等热词,探讨如何在J
保姆级教程:用Arduino+MPU6050自制寻北仪(附MEMS陀螺精度测试报告)
本文提供了一份详细的Arduino与MPU6050自制寻北仪的保姆级教程,包括硬件选型、卡尔曼滤波算法优化、地磁场补偿及真北计算等关键技术。通过实测数据展示了MEMS陀螺仪在民用领域的高精度性能,帮助读者低成本实现1°以内的寻北精度。
英飞凌Tricore实战系列导读
笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。
logback-kafka-appender环境搭建:本地启动Kafka并跑通第一个日志Demo的完整步骤
想要把 Java 应用的日志实时送入 Kafka,`logback-kafka-appender` 是最简单直接的方案:它作为一个 logback appender,让应用日志直接发布到 Apache Kafka,无需改造业务代码。本文将带你完成 logback-kafka-appender 环境搭建,从零开始本地启动 Kafka,并跑通第一个日志 Demo,全程图文步骤、可照抄执行,非常适合刚接
DMA engine initialization failed rk3568的原因及解决方案
刚开始调试 switch 芯片的时候由于rgmii 时钟是output , rk3568的 GMAC 需要 switch 芯片提供 125M的时钟,如果没有这个时钟就会初始化失败,进入文件系统后 ethx 不会出现(当然,如果屏蔽掉这里ethx 会出现,但是引发更多的问题,笔者在这块耍小聪明,导致耗费了近一个月时间,把网络这块整个查了一遍 -----)dma 软复位是在进入文件系统后,网络系统启动的时候,我想如果在这个之前只要提供合适的时钟那么就是可以的,那么------以上是官方的文档说明。
解决SLF4J日志绑定失败:从原理到生产环境排查实战
在Java应用开发中,日志系统是监控、调试和问题排查的核心基础设施。SLF4J作为日志门面,通过统一的API接口实现了与具体日志实现的解耦,其核心原理在于运行时通过StaticLoggerBinder类完成与Logback、Log4j2等实现的动态绑定。这一机制确保了代码的灵活性和可维护性,但在复杂的依赖环境中,常因类路径中缺少或存在多个绑定包而导致绑定失败,出现“Failed to load class”警告,使得日志输出失效,严重影响应用可观测性。尤其在微服务架构和Spring Boot项目中,依赖冲突
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Java抽象类与接口深度解析:从核心概念到实战应用
在面向对象编程中,抽象与多态是构建灵活、可扩展软件系统的基石。抽象类通过定义部分实现的模板,实现了代码复用和层次化设计,适用于描述具有共同特征和行为的对象家族。接口则作为纯粹的行为契约,实现了多态和解耦,允许不同类型对象共享相同能力。从设计模式到企业级应用,理解抽象类与接口的本质差异和适用场景,是掌握Java面向对象设计思想、提升代码质量的关键。本文结合Java 8+新特性,深入探讨抽象类与接口在模板方法模式、策略模式等实战场景中的应用,帮助开发者避免常见设计误区,写出更优雅、健壮的代码。
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
Red5 1.0.1 在 Ubuntu 12.10 上的 RTMP 服务部署与调试指南
RTMP 是实时音视频传输的基础协议,其握手流程、AMF 编解码和流路径管理构成流媒体开发的核心原理。理解 RTMP 不仅关乎推拉流连通性,更涉及底层网络事件循环、Java 字节码兼容性及服务端协议栈调试能力。Red5 作为开源 RTMP 服务器,以高度透明的日志输出和可修改源码特性,成为协议教学、遗留系统维护与轻量级验证的理想平台。尤其在受限环境(如 Ubuntu 12.10)中,它规避了容器化与高版本 Java 的复杂依赖,直击 RTMP 协议本质。本文围绕 Red5 1.0.1 的编译、JDK 7u8
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
277



被折叠的 条评论
为什么被折叠?



