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

下面,介绍一个日志框架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. Git branch -r 无法获取远程分支,ui可以看见分支但是git 命令无法查看解决方案

    zhc@hongchangfirst$ git checkout -b hongchangfirst origin/hongchangfirst 出现: fatal: Cannot update pa ...

  2. Linux之Vim学习

    Linux之Vim学习 一般模式 光标移动 按键 作用 j或down方向键 向下移动一个字符 k或up方向键 向上移动一个字符 h或left方向键 向左移动一个字符 l或right方向键 向右移动一个 ...

  3. trufflesuite/truffle-hdwallet-provider

    https://github.com/trufflesuite/truffle-hdwallet-provider/blob/master/index.js 实现代码 truffle-hdwallet ...

  4. 通过SSH秘钥登录线上MySQL数据库(基于Navicat)

    前言 生产环境的数据库往往需要经过严格的安全限制,所以禁用密码登录,使用秘钥的方式是一种相对安全的登录方式. 原理: 角色: 主机A:其他主机,有访问线上数据库的权限 主机B:线上数据库的主机 主机C ...

  5. 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据

    一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...

  6. 大数据入门第十四天——Hbase详解(一)入门与安装配置

    一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...

  7. 20155234 昝昕明 《网络对抗技术》实验一 PC平台逆向破解

    实践内容: 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的sh ...

  8. Exp1 PC平台逆向破解(5)M

    Exp1 PC平台逆向破解(5)M [ 直接修改程序机器指令,改变程序执行流程] 用命令cp pwn1 20155320备份pwn1 输入objdump -d 20155320反汇编,找到call指令 ...

  9. VS中为非控制台程序提供控制台输出窗口

    /************************************************************************/ /* 模块名:ConsoleAdapter 文件名 ...

  10. REST-framework快速构建API--权限

    我们在访问资源时,有些资源保密程度较高,需要特殊的人员才能访问.比如,获取公司的每日收入流水的API接口,只能CEO才能查看. 这时,我们就需要将资源设定权限了. REST-framework实现如下 ...