JAVA 日志框架简单了解

JAVA 开发中,一个离不开的东西就是日志,当在本地开发时,想要找到一些引起BUG 的问题点,我们可以通过DEBUG的形式,但是一旦项目上线,我们可能就没办法直接追踪问题,这时就需要一些工具帮我们把项目运行中一些数据打印保存下来,方便问题分析定位。

没有日志框架怎么办

记得刚开始开发JAVA 时,我们一定都用过System.out.println()做过打印的事情,其实,这样也不是不可以,但是一个日志框架要做的,其实并不只是打印输出数据,他可能还需要具有以下一些功能

  1. 可以持久化,无论是磁盘文件,还是数据库等
  2. 如果是持久化到磁盘文件,可以自定义分割,比如超过10M自动分割,防止单个日志文件过大。
  3. 可以控制输出级别。比如有些日志我只要在测试环境的时候才打印,而正式上线,则不打印。

还有一点,因为System.out.println() 底层是用到了synchronized 关键字,可能会导致一些性能问题


image.png

常见的日志框架

JAVA 开发中,大家也一定用到很多日志框架,常见的主要有以下这些。

  • JDKLog
  • Log4J
  • LogBack
  • SLF4J

JDKLog

JDKLog 是JDK自带的日志框架,不需要引入任何的第三方包就可以直接使用,使用方法如下

import java.util.logging.Logger;


   Logger logger = Logger.getLogger("JDKLog");
   logger.info("Hello World.");

运行后输出


image.png

Log4J

Log4J 是Apache基金开源的日志框架,他可以实现控制日志输出目的地,控制输出格式等等。
Log4J 实际上分了Log4J 和 Log4J2,下面演示下Log4J的使用方法
先引入相关包

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

然后项目中使用

import org.apache.log4j.Logger;

  Logger logger = Logger.getLogger(JLog.class);
        logger.info(" info ");
        logger.debug(" debug ");
        logger.error(" error ");

但是如果直接是在普通的maven 项目中使用,可能会出现如下错误:

log4j:WARN No appenders could be found for logger (log.JLog).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

因为log4j 需要配置一些东西才可以,我们可以在项目的resources目录下建立 log4j.properties文件,然后
写入如下配置

log4j.rootLogger=ALL, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

这样,就可以顺利打印了,结果如下


image.png

LogBack

LogBack 是在log4j 之后的一个日志框架,实际上是同一个人开发的,主要是重写了内核,比log4j在性能上更加的好,以下介绍摘自百度百科:

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能

使用方法如下:
先引入依赖

   <!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

     Logger log = LoggerFactory.getLogger(JLog.class);
     log.info("info");
     log.debug("debug");
     log.error(" error ");

SLF4J

SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统,他主要解决的问题场景如下,假如系统今天采用了A日志框架,过了2天由于特殊原因,需要切换到B日志框架,那如果没有这个门面,则需要更改所有的日志代码,而有了这个门面,项目中直接使用门面来输入日志,则切换时没有影响,不需要改变任何代码,只需要引入新的依赖,做一个配置即可。

常用的日志级别

  • OFF 关闭:最高级别,不输出日志。
  • FATAL 致命:输出非常严重的可能会导致应用程序终止的错误。
  • ERROR 错误:输出错误,但应用还能继续运行。
  • WARN 警告:输出可能潜在的危险状况。
  • INFO 信息:输出应用运行过程的详细信息。
  • DEBUG 调试:输出更细致的对调试应用有用的信息。
  • TRACE 跟踪:输出更细致的程序运行轨迹。
  • ALL 所有:输出所有级别信息
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容