有不少童鞋私信我一些在写代码时候遇到的问题,但是无法定位问题出在哪里,也没有日志记录,实际上,写日志是开发项目过程中很重要的一个环节,很多问题都可以从日志中找到根源,从而定位到出错位置,为解决问题提供了基础,同时,对于一些关键性的操作,比如:银行转账,机票预订的时候,记录下日志,方便查看相关信息。

下面,介绍一个日志框架log4j的使用。

1.下载

http://logging.apache.org/log4j/1.2/download.html
我下的版本是:log4j-1.2.17.zip
下载完成后,解压,导入log4j-1.2.17.jar到项目中

2.创建Logger对象

T.java

package com.hui.demo;

import org.apache.log4j.Logger;

public class T {
public static final Logger logger = Logger.getLogger(T.class); public void test() { }
}

3.为日志设定不同的级别

日志级别:debug < info < warn < error < fatal

也就是说,如果设置日志为某个级别,则日志记录大于等于这个级别类型的日志,例如:设置日志级别为warn,最后日志中会显示示:warn,error,fatal类别的日志。

T.java

package com.hui.demo;

import org.apache.log4j.Logger;

public class T {
public static final Logger logger = Logger.getLogger(T.class);
public void test() {
logger.debug("这是debug类别的日志");
logger.info("这是info类别的日志");
logger.warn("这是warn类别的日志");
logger.error("这是error类别的日志");
logger.fatal("这是fatal类别的日志");
}
}

4.编写日志的配置文件

在项目的src目录下建一个文件:log4j.properties

#日志的输出方式:ConsoleAppender为控制台输出
#另外log4j还提供其他的输出方式,例如:文件输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#日志的布局设置,参考log4j API
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#日志的格式设置
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
#rootLogger表示根目录下所有类的日志都打印出来
#DEBUG为日志级别,表示DEBUG以及大于DEBUG级别的日志全部输出
log4j.rootLogger=DEBUG,stdout

5.测试

TestLog4j.java
```
package com.hui.demo;

public class TestLog4j {

public static void main(String[] args) {

T t = new T();

t.test();

}

}

运行,可以看到控制台打印出日志信息。

2015-06-18 01:25:23,885 [main] DEBUG com.hui.demo.T - 这是debug类别的日志

2015-06-18 01:25:23,885 [main] INFO com.hui.demo.T - 这是info类别的日志

2015-06-18 01:25:23,885 [main] WARN com.hui.demo.T - 这是warn类别的日志

2015-06-18 01:25:23,885 [main] ERROR com.hui.demo.T - 这是error类别的日志

2015-06-18 01:25:23,885 [main] FATAL com.hui.demo.T - 这是fatal类别的日志


以上是一个把日志打印在控制台的例子。 <h2>另外一个例子</h2> T.java

package com.hui.demo;

import org.apache.log4j.Logger;

public class T {

public static final Logger logger = Logger.getLogger(T.class);

public int divide(int num1, int num2) {

int result = 0;

logger.debug("num1 = "+num1 + " num2 = "+ num2);

try {

result = num1/num2;

logger.debug("result is :"+ result);

} catch (Exception e) {

logger.error("出错了:"+e.getMessage());

}

return result;

}

}

TestLog4j.java

package com.hui.demo;

public class TestLog4j {

public static void main(String[] args) {

int a = 4;

int b = 2;

T t = new T();

t.divide(4, 0);

}

}

运行,打印出日志信息:

2015-06-18 01:53:24,855 [main] DEBUG com.hui.demo.T - num1 = 4 num2 = 0

2015-06-18 01:53:24,855 [main] ERROR com.hui.demo.T - 出错了:/ by zero

看到日志,问题就很清晰的定位到了。

童鞋们可以考虑以下拓展:
1.把日志打印到文件。
2.日志文件 按每天/按照固定大小 生成一份新的。
3.将日志框架应用到你们的项目中,在关键代码中加记录日志的操作。 <h2>参考资料:</h2>
log4j Manual: http://logging.apache.org/log4j/1.2/manual.html
log4j API : http://logging.apache.org/log4j/1.2/apidocs/index.html

【助教】浅析log4j的使用的更多相关文章

  1. log4j 实例 , 浅析

    一.新建log4j.propperties,放在工程的src目录下. #fileAppender log4j.rootCategory = DEBUG,file,consoleAppender log ...

  2. slf4j,log4j,logback 初步使用

    log4j,slf4j,logback简单介绍见 LogBack简易教程 Logback浅析 简单的将,slf4j是一个日志的框架,有各种日志的接口,但是并不包含实际的写日志的方法. log4j,lo ...

  3. 从底层源码浅析Mybatis的SqlSessionFactory初始化过程

    目录 搭建源码环境 POM依赖 测试SQL Mybatis全局配置文件 UserMapper接口 UserMapper配置 User实体 Main方法 快速进入Debug跟踪 源码分析准备 源码分析 ...

  4. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  7. netty5 HTTP协议栈浅析与实践

      一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...

  8. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  9. 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler

    熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...

随机推荐

  1. Python3 中 sys.argv[ ]的用法解释

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list), ...

  2. Spring 事务回滚代码

    在事务中实行的方法:org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransacti ...

  3. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

  4. shiro实战系列(二)之入门实战续

    下面讲解基于实战系列一,所以相关的java文件获取pom.xml及其log4j文件同样适用于本次讲解. 一.Using Shiro Using Shiro 现在我们的 SecurityManager ...

  5. dbca时报错:ORA-12705(NLS_LANG=AMERICAN_AMERICA.UTF8);

    #add by zexport ORACLE_BASE=/u01/oracle export ORACLE_HOME=/u01/oracle/11.02 export ORACLE_SID=z exp ...

  6. 【转】微信开发-NATAPP的使用

    1.为什么使用natapp 1.1 在进行微信公众号开发时,我们需要搭建网站,并且有可能需要将项目部署到外网可访问的域名上,并且随时都有可能修改网站内容进行调试.如果能够将内网ip映射到外网上,大大方 ...

  7. liMarquee – jQuery无缝滚动插件(制作跑马灯效果)

    liMarquee 是一款基于 jQuery 的无缝滚动插件,类似于 HTML 的 marquee 标签,但比 marquee 更强大.它可以应用于任何 Web 元素,包括文字.图像.表格.表单等元素 ...

  8. Drupal错误:drupal Maximum execution time of 30 seconds exceeded database in解决方法

    Drupal开源内容管理框架 Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成.连续多年荣获全球最佳CMS大奖,是 ...

  9. Xcode7如何真机调试

    查阅网上Xcode7如何真机调试,教程我觉得都有点繁琐,然后我自己用3步实现真机测试: 1.左上角Xcode  -->  Perferences  -->  Accounts  --> ...

  10. ubuntu14.04上设置默认python命令是执行python3而不是Python2

    update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --inst ...