java日志统一集成的两种方案

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

slf4j架构

Log4j日志集成

Logback日志集成

总结

分享的目的

一次性的解决应用中日志遇到的各种问题,包括:消除应用启动过程中与日志系统相关的无用错误提示,日志打印不出来的问题等;

Slf4j架构

  1. SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System,通俗的讲,slf4j提供了目前Java日志系统的适配器;
  2. SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类,有点类似于JDBC,在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统(SPI)。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。

Log4j日志集成

公共的Maven依赖

<dependency>
         <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
        <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jcl-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
      <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
     <version>${slf4j.verson}</version>
</dependency>

log4j依赖

<dependency>
          <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.verson}</version>
</dependency>

排除的依赖

<exclusion>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
<exclusion>

<exclusion>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
<exclusion>

<exclusion>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-access</artifactId>
<exclusion>

<exclusion>
       <groupId>org.logback-extensions</groupId>
    <artifactId>logback-ext-spring</artifactId>
<exclusion>

<exclusion>
    <groupId>commons-logging</groupId>
     <artifactId>commons-logging</artifactId>
</exclusion>

Logback日志集成

公共的Maven依赖

<dependency>
         <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>log4j-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jcl-over-slf4j</artifactId>
       <version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
      <groupId>org.slf4j</groupId>
     <artifactId>jul-to-slf4j</artifactId>
     <version>${slf4j.verson}</version>
</dependency>
<dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
         <version>${logback.version}</version>
</dependency>
<dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
</dependency>
<dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
           <version>${logback.version}</version>
</dependency>
<dependency>
     <groupId>org.logback-extensions</groupId>
     <artifactId>logback-ext-spring</artifactId>
     <version>0.1.2</version>
</dependency>

Logback依赖

<dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
         <version>${logback.version}</version>
</dependency>
<dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
</dependency>
<dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
           <version>${logback.version}</version>
</dependency>
<dependency>
     <groupId>org.logback-extensions</groupId>
     <artifactId>logback-ext-spring</artifactId>
     <version>0.1.2</version>
</dependency>

排除的依赖

<exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
</exclusion>
<exclusion>
    <groupId>commons-logging</groupId>
     <artifactId>commons-logging</artifactId>
</exclusion>

总结

  1. 当然大家在对自己的应用进行了相应的日志方案集成之后,最好也要在web.xml中配置日志的初始化的listener;
  2. 如果大家按照上面的方案对自己应用的日志系统进行了改造,你会发现,在应用启动的过程中,再也不会出现与日志系统本身集成相关的错误,更不会出现日志打不出来的现象,整个应用中日志打印出来是非常的干净;
  3. 当然统一日志集成不仅只有log4j和logback方案,还有其它方案,其它方案详见slf4j官方网站,地址链接是:https://www.slf4j.org/
  4. 因为logback日志比log4j更新,写日志的效率更高,更友好、更稳定,建议大家有时间统一把自己的应用日志系统切换到logback,log4j日志转换到logback 日志也是非常方便的,只需要按上面的要求替换相关的maven依赖,然后用logback官方的转换工具把log4j.propertiea配置文件转换成logback.xml的配置文件,如果是log4j.xml文件,转换到logback.xml更容易,只需要替换相关的appender即可,地址:https://logback.qos.ch/translator/
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 物联网
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
本文提出一种面向能效与低延迟的离线语音控制智能家居方案,通过将关键词识别(KWS)集成至终端设备,结合去中心化Mesh网络与CoAP协议,实现本地化语音处理。相较云端方案,系统能耗降低98%,延迟减少75%以上,显著提升响应速度与能源效率,为绿色智能家居提供可行路径。(236字)
267 17
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
487 12
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
3月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
764 0
编解码 算法 vr&ar
259 0
|
3月前
|
缓存 监控 Kubernetes
Java虚拟机内存溢出(Java Heap Space)问题处理方案
综上所述, 解决Java Heap Space溢出需从多角度综合施策; 包括但不限于配置调整、代码审查与优化以及系统设计层面改进; 同样也不能忽视运行期监控与预警设置之重要性; 及早发现潜在风险点并采取相应补救手段至关重要.
530 17
|
4月前
|
自然语言处理 负载均衡 算法
推理速度提升300%:LLaMA4-MoE的FlashAttention-2集成与量化部署方案
本文详解LLaMA4-MoE模型架构与实现全流程,涵盖语料预处理、MoE核心技术、模型搭建、训练优化及推理策略,并提供完整代码与技术文档,助你掌握大模型MoE技术原理与落地实践。
295 6
|
4月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
341 0
|
4月前
|
Cloud Native 前端开发 Java
WebAssembly 与 Java 结合的跨语言协作方案及性能提升策略研究
本文深入探讨了WebAssembly与Java的结合方式,介绍了编译Java为Wasm模块、在Java中运行Wasm、云原生集成等技术方案,并通过金融分析系统的应用实例展示了其高性能、低延迟、跨平台等优势。结合TeaVM、JWebAssembly、GraalVM、Wasmer Java等工具,帮助开发者提升应用性能与开发效率,适用于Web前端、服务器端及边缘计算等场景。
144 0
|
5月前
|
缓存 人工智能 监控
MCP资源管理深度实践:动态数据源集成方案
作为一名深耕AI技术领域多年的开发者,我见证了从传统API集成到现代化协议标准的演进历程。今天要和大家分享的MCP(Model Context Protocol)资源管理实践,是我在实际项目中积累的宝贵经验。MCP作为Anthropic推出的革命性AI连接标准,其资源管理机制为我们提供了前所未有的灵活性和扩展性。在过去的几个月里,我深度参与了多个企业级MCP项目的架构设计和实施,从最初的概念验证到生产环境的大规模部署,每一个环节都让我对MCP资源管理有了更深刻的理解。本文将从资源生命周期管理的角度出发,详细探讨文件系统、数据库、API等多种数据源的适配策略,深入分析实时数据更新与缓存的最佳实践
186 0