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

1 篇文章 0 订阅
1 篇文章 0 订阅

    日志在实际开发以及运维里作用是很大的,如果日志做得好,对于运维的成本将会大大的降低。日志的产生就是给人看的,所以必须得清晰好看,这样才能更好理解,监控和问题的定位。

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

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

一、日志框架:

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

    为什么最受欢迎?

        a.首先Log4j是免费的,是一款基于Java的开源日志组件,

        b.可以自定义,包括:

            i.日志信息输出位置,如输出到控制台、文件、用户界面,也可以输出到操作系统的事件记录器和一些系统常驻进程。

            ii.日志格式和日志等级

官方网站: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

作者:码农网 – 小峰

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

    运用日志主要就是监控和问题定位,所以在操作日志的过程中根据这个核心做日志的记录即可。

    日志很重要,这个再提一下,但是也不能滥用,尽量言简意赅,没必要写博士论文。

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值