系统不可或缺的部分--日志

    作为第一篇分享的技术类文章,就以这段时间项目遇到的并比较感兴趣的方面做一些知识面的收集以及归纳总结。

    什么是日志?用于记录系统操作事件的记录。日志的作用是什?对于运行环境中系统的监控和问题的定位。其实说白了就是为了让人能看懂系统是如何运作的文字记录。

    日志重要?我的说法是日志是优秀系统不可或缺的部分,当然非常优秀的系统日志也是必须的,而其他不优秀的呢?Emm .. 可能不关日志事吧。

    文章的结构我分为第一部分常用的日志框架和工具,第二部分开发时如何运用日志,第三部分实践log4j的使用。

第一部分常用的日志框架和工具

一、日志框架:

1. log4j–最受欢迎的Java日志组件

    Log4j是一款基于Java的开源日志组件,Log4j功能非常强大,我们可以将日志信息输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。更值得一提的是,Log4j可以允许你非常便捷地自定义日志格式和日志等级,可以帮助开发人员全方位地掌控日志信息。

官方网站:http://logging.apache.org/log4j/2.x/

2. SLF4J – 基于API的Java日志框架

    SLF4J提供了一个简单统一的日志记录接口,开发者在配置和部署时只需要实现这个接口即可实现日志功能。Logging API实现既可以选择直接实现SLF4J接的loging APIs如:NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。

    官方网站:http://www.slf4j.org/

3. Commons Logging

    Commons Logging的实现不依赖于具体的日志实现工具,仅仅提供一些日志操作的抽象接口,它对其他的日志工具做了封装,比如Log4J,Avalon LogKit, 和JDK 1.4等。

    官方网站:http://commons.apache.org/proper/commons-logging/

4. Darks Logs

    Darks Logs和log4j类似,也适用于Java、Android等项目,但是Darks Logs使用更加简单,而且对Android端做了非常大的改善。Darks Logs对Sqlite的日志保存增加了Appender。其旨在解决Android日志无法灵活控制日志等级、格式、保存或显示目标等常用操作等的问题。

    官方网站:https://github.com/liulhdarks/darks-logs

二、日志工具或系统:

1. gclogviewer – Java日志查看工具

    gclogviewer是一个支持jdk 6的gc log可视化工具,和gcviewer相比,gclogviewer支持根据gc log生成GC的趋势图,也支持生成调优建议所需的数据趋势图。

    官方网站:http://code.google.com/p/gclogviewer/

2. Flume – Apache日志服务器

    之前介绍的都是一些日志记录工具,Flume则是一个日志分析系统,Flume是分布式的,它有一个非常灵活的架构,用来收集、聚合以及移动大量日志数据,并且提供可靠、容错的系统架构。

官方网站:http://flume.apache.org/

3.zLogFabric – 日志存储系统

    zLogFabric 是一个集成的跨平台日志解决方案,通过消息系统收集各个应用的日志信息存储到一个集中式的系统中。模块化的设计使得服务器可对日志进行存储、转发、警报以及生成日志统计信息。zLogFabric可收集来自文件、syslog、log4j、log4net 以及Windows 事件的数据。

    官方网站:http://www.zlogfabric.com/

4.logstash – Java日志管理工具

    logstash是一款功能非常强大的日志管理工具,利用logstash,你可以对日志进行传输、处理、管理和检索,并且提供Web接口以便开发者统计和查询日志信息。

官方网站:http://www.logstash.net

第一部分参考文章链接:http://www.codeceo.com/8-java-log-framework.html

作者:码农网 – 小峰

第二部分开发时如何运用日志

    日志对于运行环境中系统的监控和问题定位是至关重要的,在系统设计、开发和实现的过程中必须时刻注意log的输出,这对于日后的系统监控和异常分析起至关重要的作用 。

    日志很重要,但也不能泛滥,如果把程序每一个详细的事件都记录在日志里,性能方面先不说,直观来看,一篇博士论文绝对没有美妙的诗歌好看。

    好吧,不扯了,说一下如何做到不滥用日志、减少大量无用信息,让日志记录足够精简明。

一、要知道系统的哪些运行信息需要进行日志记录。

1、功能模块的启动和结束(完整的系统由多个功能模块组成,每个模块负责不同的功能,因此需要对模块的启动和结束进行监控。是否在需要的时机正常加载该模块?又是否在退出结束的时候正常完成结束操作,正常退出?)

2、用户的登录和退出(哪位用户在什么时间通过什么IP登录或退出了系统)

3、系统的关键性操作

    a. Inbound log [client side or other side]

    b. Outbound log [client side or other side]

    c. 数据库连接信息

    d. 网络通信状态(Successful or failure)

4、系统运行期间的异常信息

    a. Compile exception : NullPointerException 

    b. System error: OutOfMemoryError

    c. Connection exception 

    d. Conversion exception 

    e. Business exception handling

二、Log的表达要简单明了一针见血的把话说漂亮

    日志信息要求必须精简,过多的无用信息不但对系统分析起不到什么作用,反而会增加系统的运行压力、消耗系统的运行资源

    在没有运用其他Logger  server的时候可以应用以下的模板:

        时间-[线程名][日志等级]-日志输出位置(全类名,可以精确到方法名):日志信息

        2013-09-04 10:49:20.296-[Thread-initRedis21504][INFO]-com.shanghai.LoginController.initLogInfo:LingMing[User] is logining

        日志信息的内容可以根据不同的情况进行设计,但是前面的时间到日志输出位置必须要保证完整性,这样才有利于日志的分析。

    如果有Logger server 那么可以更加简洁表达,如:[事件描述,日志的类型],

详细的实践在下一篇文章【日志系统ELK与Log4j】中会有提到。

三、划分日志等级

    日志等级通常分为四种:DEBUG、INFO、WARN、ERROR

    DEBUG: 系统调试信息,通常用于开发过程中对系统运行情况的监控,在实际运行环境中不    进行输出。

    INFO: 系统运行的关键性信息,通常用于对系统运行情况的监控。

    WARN: 告警信息,系统存在潜在的问题,有可能引起运行异常,但此时并未产生异常。

    ERROR: 系统错误信息,需要进行及时处理和优化。

详细的日志等级设置以及实现会在下一篇文章【日志系统ELK与Log4j】中会有提到

第二部分参考文章链接:https://www.cnblogs.com/PerkinsZhu/p/6440584.html

第三部分Log4j简单的使用:

project architecture :Spring Boot

Maven dependencies :


log4j properties setting :



初始化log4j:


写一个简单的接口,用postman调用接口做测试:


postman:


第三部分参考文章链接:https://blog.csdn.net/zgc625238677/article/details/52118534

第三部分代码百度硬盘链接:https://pan.baidu.com/s/1A77Y8i7lHA11n6ih--LUdg

提取密码:ei51

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,023评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,982评论 0 6
  • 文章作者:Tyan博客:noahsnail.com 2.Introduction to the Spring Fr...
    SnailTyan阅读 5,388评论 7 56
  • 在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此...
    Java架构阅读 3,472评论 2 41
  • 有几天没写了 这俩天过的总得来说还是不错的,只是一直在写代码,写的我有点犯混了 而且还有些是我不会的,真的有些头疼...
    bu君道阅读 186评论 0 0