【助教】浅析log4j的使用
有不少童鞋私信我一些在写代码时候遇到的问题,但是无法定位问题出在哪里,也没有日志记录,实际上,写日志是开发项目过程中很重要的一个环节,很多问题都可以从日志中找到根源,从而定位到出错位置,为解决问题提供了基础,同时,对于一些关键性的操作,比如:银行转账,机票预订的时候,记录下日志,方便查看相关信息。
下面,介绍一个日志框架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的使用的更多相关文章
- log4j 实例 , 浅析
一.新建log4j.propperties,放在工程的src目录下. #fileAppender log4j.rootCategory = DEBUG,file,consoleAppender log ...
- slf4j,log4j,logback 初步使用
log4j,slf4j,logback简单介绍见 LogBack简易教程 Logback浅析 简单的将,slf4j是一个日志的框架,有各种日志的接口,但是并不包含实际的写日志的方法. log4j,lo ...
- 从底层源码浅析Mybatis的SqlSessionFactory初始化过程
目录 搭建源码环境 POM依赖 测试SQL Mybatis全局配置文件 UserMapper接口 UserMapper配置 User实体 Main方法 快速进入Debug跟踪 源码分析准备 源码分析 ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- netty5 HTTP协议栈浅析与实践
一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
随机推荐
- Python3 中 sys.argv[ ]的用法解释
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list), ...
- Spring 事务回滚代码
在事务中实行的方法:org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransacti ...
- windows下mysql和linux下mysql主从配置
1. linux下mysql安装版本5.6 windows下mysql版本5.7 不要问我为什么版本不一致 就是想这么搞 2. linux为主服务器 windows为从服务器 3.找到li ...
- shiro实战系列(二)之入门实战续
下面讲解基于实战系列一,所以相关的java文件获取pom.xml及其log4j文件同样适用于本次讲解. 一.Using Shiro Using Shiro 现在我们的 SecurityManager ...
- 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 ...
- 【转】微信开发-NATAPP的使用
1.为什么使用natapp 1.1 在进行微信公众号开发时,我们需要搭建网站,并且有可能需要将项目部署到外网可访问的域名上,并且随时都有可能修改网站内容进行调试.如果能够将内网ip映射到外网上,大大方 ...
- liMarquee – jQuery无缝滚动插件(制作跑马灯效果)
liMarquee 是一款基于 jQuery 的无缝滚动插件,类似于 HTML 的 marquee 标签,但比 marquee 更强大.它可以应用于任何 Web 元素,包括文字.图像.表格.表单等元素 ...
- Drupal错误:drupal Maximum execution time of 30 seconds exceeded database in解决方法
Drupal开源内容管理框架 Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成.连续多年荣获全球最佳CMS大奖,是 ...
- Xcode7如何真机调试
查阅网上Xcode7如何真机调试,教程我觉得都有点繁琐,然后我自己用3步实现真机测试: 1.左上角Xcode --> Perferences --> Accounts --> ...
- ubuntu14.04上设置默认python命令是执行python3而不是Python2
update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --inst ...