探索Java的日志世界

本文的思维导图

一、主题

打开日志的大门,探索的Java日志世界

二、目标

  1. 了解常用的日志框架
  2. 掌握日志框架的选择和使用以及开发规范
  3. 了解日志框架中的一些设计思想

三、内容

1、日志及日志框架简介

1.1 、日志简介

1.1.1 、 什么是日志?

1)基本字义是指工作日志 ,详细介绍一个过程和经历的记录。 日志(汉语词汇)

2)网络设备、系统及服务程序等,在运作时都会产生一个叫log的事件记录;每一行日志都记载着日期、时间、使用者及动作等相关操作的描述。 日志(计算机术语)

: 日志可以是有价值的信息宝库,也可以是毫无价值的数据泥潭。

1.1.2. 、什么是Java日志?

Java日志:Java应用程序在运行过程中记录的一些数据信息

如访问的程序中某个接口的时间,请求参数、响应参数等等。

1.2、从System.out.println() 打开Java日志的大门

  1. public static void main(String[] args) {
  2. System.out.println("hello sitech");
  3. }

优点

使用方便和简单!

缺点

  1. 只能输出到控制台,不能输出到文件!
  2. 不能自定义全局的输出格式!(日志级别、日志切割/自动归档、异步打印日志等)
  3. 性能较低,如 println了 synchronized!

1.3、日志框架的简介

Java常用的日志框架对比和深入分析

commons-logging和slf4j都只是一个日志标准,并不是日志系统的具体实现

log4j,logback等等才是日志的真正实现。

2、如何选择及使用日志框架

2.1、如何选择?

接口选一个 、实现选一个实现,组合!

日志门面/接口: SLF4J(即简单日志门面(Simple Logging Facade for Java) );

日志实现:Logbacklog4j

2.2、 如何使用?

2.2.1 、单一日志框架通过slf4J使用 SLF4J user manual(用户使用手册)

注: 每个日志框架的实现都有自己的配置文件。使用slf4j以后,配置文件还是框架自己本身的配置文件;

  1. 导入对应的jar

  2. 编写相应实现的配置文件

  3. 使用slf4j编写日志代码

2.2.2、 在复杂系统如何统一所有的日志都统一到slf4J;legacy APIs
  1. 将系统中其他日志框架先排除出去;
  2. 用中间包来替换原有的日志框架;
  3. 我们导入slf4j其他的实现

2.3、例子

  1. 简单实现slf4j + log4J
  2. 简单实现slf4j + logback
  3. log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  4. 解决办法

log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析

log4jDelegationLoop

3、 日志开发规范

参考 阿里巴巴Java开发手册(终极版).pdf - 日志规范

4、Slf4j使用到的设计模式

4.1 、设计模式

  1. 工厂模式
  2. 外观模式门面模式
  3. 桥接模式
  4. .....

4.2 、 源码解析

四、 总结和讨论

1、总结

本次分享是Java日志的整体的介绍,其实日志开发中还有很多的细节需要关注!

  1. 比如日志的详细使用:日志配置文件编写,日志输出的格式语法,日志输出的级别,日志滚动策略等等
  2. 比如日志的设计思想:设计模式、加载原理等等

本此分享只是一个抛砖引玉的过程,日志的相关知识还是特别的多,希望后面大家可以分享出更精彩更深入的日志知识和使用技巧。

2、讨论

1、什么情况下,哪些数据信息需要记录日志?

  • 请求参数
  • 返回参数
  • 时间
  • 服务器IP(分布式)

2、大家谈一下实际日志开发中一些经验技巧?

  • 分布日志排查不方便 --统一日志平台(集中日志收集)ELK
  • 统一日志平台:对日志格式有一定要求
  • 日志文件数据(服务调用日志)

附录

Asynchronous Loggers for Low-Latency Logging:性能对比

log4j2使用介绍

关于日志记录的一些感想

Java日志框架:slf4j作用及其实现原理


如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

© 每天都在变得更好的阿飞

探索Java的日志世界的更多相关文章

  1. 探索java世界中的日志奥秘

                    java日志简单介绍 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.JAVA领域存在多种日志框架,目前常用的日志 ...

  2. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  3. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

  4. 深入探索Java设计模式之单例模式

    单例模式可确保在给定的时间实例中只能创建一个具有全局访问点的对象.这是面向对象编程中最常用的技术之一.尽管它很简单,但从类设计的角度来看可能是最简单的,但是在尝试实现它们之前,必须先解决一些细微的问题 ...

  5. Java 标准日志工具 Log4j 的使用(附源代码)

    源代码下载 Log4j 是事实上的 Java 标准日志工具.会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准.如果你是一名 Java 程序员,如果你还 ...

  6. 探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现]

    探索 Java 同步机制[Monitor Object 并发模式在 Java 同步机制中的实现] https://www.ibm.com/developerworks/cn/java/j-lo-syn ...

  7. Java自定义日志输出文件

    Java自定义日志输出文件 日志的打印,在程序中是必不可少的,如果需要将不同的日志打印到不同的地方,则需要定义不同的Appender,然后定义每一个Appender的日志级别.打印形式和日志的输出路径 ...

  8. Java GC 日志详解(转)

    Java GC日志可以通过 +PrintGCDetails开启 以ParallelGC为例 YoungGC日志解释如下(图片源地址:这里) : FullGC(图片源地址:这里): http://blo ...

  9. java Log日志规范

    Overview 一个在生产环境里运行的程序如果没有日志是很让维护者提心吊胆的,有太多杂乱又无意义的日志也是令人伤神.程序出现问题时候,从日志里如果发现不了问题可能的原因是很令人受挫的.本文想讨论的是 ...

随机推荐

  1. ASP.NET调用cmd命令提示符拒绝访问解决方案

    using System.Diagnostics; public class CmdHelper { private static string CmdPath = @"C:\Windows ...

  2. C语言复习---获取矩阵的对角和

    #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAX 5 int main() ...

  3. bzoj千题计划261:bzoj3294: [Cqoi2011]放棋子

    http://www.lydsy.com/JudgeOnline/problem.php?id=3294 如果一个颜色的棋子放在了第i行第j列,那这种颜色就会占据第i行第j列,其他颜色不能往这儿放 设 ...

  4. CSS3 Day1 练习

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. XHR工厂的实现

    ajax这种常见的开发模式已经遍布我们日常的开发之中了,ajax本质还是采用一种轮询的模式,就是隔一段时间去发送一次http请求,获取数据,然后显示在页面之上,当然,ajax比起新兴的WebScoke ...

  6. Gson学习记录

    Gson是Google开发来用来序列化和反序列化json格式数据的java库,他最大的特点就是对复杂类型的支持度高,可以完美解决java泛型问题,这得益于他对泛型类型数据的特殊处理,他的缺点就是速度慢 ...

  7. Markdown基础教程

    标题 Markdown支持6种级别的标题,对应html标签 h1 ~ h6

  8. C++ socket 网络编程 简单聊天室

    操作系统里的进程通讯方式有6种:(有名/匿名)管道.信号.消息队列.信号量.内存(最快).套接字(最常用),这里我们来介绍用socket来实现进程通讯. 1.简单实现一个单向发送与接收 这是套接字的工 ...

  9. 内核早期内存分配器:memblock

    内核早期内存分配器:memblockLinux内核使用伙伴系统管理内存,那么在伙伴系统工作前,如何管理内存?答案是memblock.memblock在系统启动阶段进行简单的内存管理,记录物理内存的使用 ...

  10. oracle日期、转换函数

    转换函数 日期类型转换成字符类型 select to_char(sysdate) s1, --14-3月 -16        to_char(sysdate, 'yyyy-mm-dd') s2, - ...