【前言】

日志对于一个系统的来说是必不可少,它可以让人们知道,系统当前运行的状况;最近对日志进行了一些实践,以下是自己在这个过程中收获的一些东西。

【一些有趣的实验】

         一、mybatis设置日志级别打印SQL语句

***log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p %t [%c] - %m%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG***

         二、Log4j日志动态加载(不重启服务)

1、达到效果

(1)修改log4j.properties在不重新启动服务的情况下有效;

(2)用途:

①比较重要是在智能云平台上线后在tomcat部署

②在开发时也可以实现;

2、相关配置

(1)由于需要一个公共的类Log4jConfig 在itoo-tool中封装(该步骤已做)

①itoo-tool中的位置:

②类的内容:

package com.dmsdbj.itoo.tool.logUtil;import org.apache.log4j.PropertyConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** log4j日志自动加载* Created by 张晗 on 2017/6/29.*/public class Log4jConfig {private boolean reload = true;private int interval = 60000;//单位为毫秒private static final Logger logger = LoggerFactory.getLogger(Log4jConfig.class);/*** log4j日志自动加载** @param reload   是否开启自动加载* @param interval 自动加载时间(ms)*/public Log4jConfig(boolean reload, int interval) {this.reload = reload;this.interval = interval;this.loadConfig();}public void loadConfig() {String log4jPath = Log4jConfig.class.getClassLoader().getResource("log4j.properties").getPath();logger.debug("log4j file path: " + log4jPath);// 间隔特定时间,检测文件是否修改,自动重新读取配置PropertyConfigurator.configureAndWatch(log4jPath, this.interval);}}

③需要在pom中引入的三个jar

(2)项目中需要加入

①在spring-context.xml中将Log4jConfig注入进去并设置多长时间监测一次

②为方便快速加入,相关内容:

    <!--配置log4j自动加载日志-张晗--><bean class="com.dmsdbj.itoo.tool.logUtil.Log4jConfig"><constructor-arg name="reload" value="true"/><constructor-arg name="interval" value="5000"/><!--单位为毫秒--></bean>

3、特殊说明:

(1)主要应用在线上环境部署,做配置即可做到修改log4j.properties可以生效,方便快速定位问题---生成平时打印error级别的日志,但在生产遇到bug想看日志时,可以直接修改log4j.properties为INFO查看详细日志;

(2)经过测试在开发时经过上述配置也可应用---在开发情况下启动项目修改log4j.properties可以生效,不过需要对idea进行自动更新设置,如下:

(3)建议大家在开发过程中使用JRebel插件(参考:IntelliJ IDEA 的 Java 热部署插件 JRebel 安装及使用),它更强大在于不仅修改log4j.properties可以自动部署而且其他的任何文件修改都可自动部署。

(4)JRebel和log4j动态加载的区别:

JRebel是开发时用的插件工具而log4j动态加载则更侧重于生产环境的部署;

         三、小结:  

系统上线后平时是打印error级别的日志(提高系统的性能,每次日志输出,写磁盘也会消耗一定的性能);但在生产遇到了bug想根据日志排查问题时,可以直接修改log4j的日志级别改为info(不用重启服务),专门看出错那块的详细日志;大大降低了排错的成本。

【总结】

日志是发现问题解决问题的重要依据,日志级别的热更改大大的降低我们排查问题的成本,使得我们可以快速定位问题解决问题从而为公司创造更多的价值。

智能一代云平台(三十三):log4j日志研究相关推荐

  1. 智能一代云平台(三十一):mybatis加入分页

    [前言] 在<智能一代云平台(三十):逆向工程生成mybatis>已经将mybatis的逆向工程搞定了:但是美中不足的是mybatis的分页查询:接下来一起来探索一下分页查询. [分页查询 ...

  2. 智能一代云平台(三十):逆向工程生成mybatis

    [前言] 最近在研究mybatis逆向工程的一些东西:通过研究Mybatis+通用mapper.逆向工程生成mybatis.Hibernate+mybatis:最终综合这些优点实现了一个我们自己的逆向 ...

  3. 智能一代云平台(二十九):通用mapper的改造

    [前言] 最近研究一下Mybatis的通用mapper,然后对其进行了一些改造以适合我们的系统,接下来为大家分享一下我的研究思路以及研究成果. [研究之路]      一.ORM框架选型: 1.我们最 ...

  4. 智能一代云平台(五):移动开发之环境搭建

    [前言] 谣传最近IT领域异常火热,而IT中的移动端领域更是如日中天. 做为一名程序猿的我,也不甘Out:于是雄心勃勃参加一个智能一代云平台移动端项目开发:之前有人做了第一版,现在我们需要重构. [基 ...

  5. 智能一代云平台(三十五):后端架构再思考

    [前言] 针对现在开发用的框架(SSM+Dubbo),自己进行了一些思考:这些问题应该是当系统在大流量,高并发,分布式情况下需要考虑一些问题,自己在对服务拆分的时候一些思考的记录下来,与大家共享: [ ...

  6. 智能一代云平台(二十三):Mycat高可用的探索

    [前言] 在智能云平台的上篇博文 <智能云平台(二十二):多租户方案比较Hibernate.EclipseLink.Mybatis+Mycat>中讲解了实 现多租户的一种方案是用MySql ...

  7. 智能一代云平台(三十六):项目中如何做到避免传递依赖

    [前言] 现在Maven项目风靡全球,不可否认的是Maven在解决项目依赖关系十分的给力:不过传递依赖也会有很多坑:接下来给大家分享一下我们项目中是如何解决传递依赖. [传递依赖中哪些事儿]     ...

  8. 智能一代云平台(三十四):后端架构一些总结

    [前言] 在重构系统之前对架构及重要技术点进行了一些研究并应用到项目中:不过在重构的时候又陆陆续续发现些需要改进的地方:最近一段时间在改进后端框架:在此与大家分享一下在这个过程中所作一些事情和自己的一 ...

  9. 智能一代云平台(三):15年上半年维护总结

    一.背景: 五月中旬,由大洲为大Boss建立起一支维护的队伍.其实之前大洲就询问我这次活动多吗?自己不多,大洲说一块儿弄系统,正好我对服务器了解稍微多点.我当时一口答应,并担保一定给弄好. 六月底就开 ...

最新文章

  1. 华为鸿蒙系统新机发布时间,华为鸿蒙OS发布会定档,或将有多款新机亮相
  2. selenium自动化测试多条数据选择第一条
  3. POJ3041 最小顶点覆盖
  4. BZOJ.3277.串(广义后缀自动机)
  5. 浅谈DNS体系结构:DNS系列之一
  6. 斯特林公式(Stirling's approximation)
  7. list可以存放python中任意类型的数据_Python中常见的数据类型小结
  8. 自动生成web服务器日志解析规则
  9. Html5学习笔记1 元素 标签 属性
  10. 7-3 逆序的三位数 (10 分)
  11. 深度优先遍历和广度优先遍历_图与深度优先搜索和广度优先搜索
  12. java bootstrapcache_使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据...
  13. docker 微镜像-alpine
  14. ChainOfResponsibilityPattern(23种设计模式之一)
  15. Python django 安装 mysqlclient 失败
  16. 注册测绘师考试有用吗
  17. 25.构造ICMP数据包
  18. 我的毕业设计后端技术栈
  19. 【Python实战|小旭学长】使用python进行城市数据分析【完结】
  20. cad导入图片之间相互转换

热门文章

  1. 程序员快放弃 Android 9.0 吧,10.0 正在来的路上!
  2. 我是如何在 10 分钟内搞砸 IT 面试的
  3. 收购 GitHub 滔天争议后,微软回应一切
  4. iPhone X 穿越回 1957 年计算力相当的电脑,将会是什么样?
  5. ARKit:也许是 iPhone 十周年最好的新开始
  6. mysql递归查询所有子级,完整PDF
  7. 第 4 章 Spring
  8. 第 10 章 树结构的基础部分
  9. ajax中加入if,如何添加if语句到Ajax
  10. idea导入spring源码_Spring源码入门到放弃(一):环境准备