【助教】浅析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 ... 
随机推荐
- Git branch -r 无法获取远程分支,ui可以看见分支但是git 命令无法查看解决方案
			zhc@hongchangfirst$ git checkout -b hongchangfirst origin/hongchangfirst 出现: fatal: Cannot update pa ... 
- Linux之Vim学习
			Linux之Vim学习 一般模式 光标移动 按键 作用 j或down方向键 向下移动一个字符 k或up方向键 向上移动一个字符 h或left方向键 向左移动一个字符 l或right方向键 向右移动一个 ... 
- trufflesuite/truffle-hdwallet-provider
			https://github.com/trufflesuite/truffle-hdwallet-provider/blob/master/index.js 实现代码 truffle-hdwallet ... 
- 通过SSH秘钥登录线上MySQL数据库(基于Navicat)
			前言 生产环境的数据库往往需要经过严格的安全限制,所以禁用密码登录,使用秘钥的方式是一种相对安全的登录方式. 原理: 角色: 主机A:其他主机,有访问线上数据库的权限 主机B:线上数据库的主机 主机C ... 
- 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据
			一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ... 
- 大数据入门第十四天——Hbase详解(一)入门与安装配置
			一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ... 
- 20155234 昝昕明 《网络对抗技术》实验一 PC平台逆向破解
			实践内容: 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的sh ... 
- Exp1 PC平台逆向破解(5)M
			Exp1 PC平台逆向破解(5)M [ 直接修改程序机器指令,改变程序执行流程] 用命令cp pwn1 20155320备份pwn1 输入objdump -d 20155320反汇编,找到call指令 ... 
- VS中为非控制台程序提供控制台输出窗口
			/************************************************************************/ /* 模块名:ConsoleAdapter 文件名 ... 
- REST-framework快速构建API--权限
			我们在访问资源时,有些资源保密程度较高,需要特殊的人员才能访问.比如,获取公司的每日收入流水的API接口,只能CEO才能查看. 这时,我们就需要将资源设定权限了. REST-framework实现如下 ... 
