注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太多了。。。。。。

    Logger必须作为类的静态变量使用。原因如下:

1 使用static修饰的属性是归这个类使用的
2 也就是说不论这个类实例化多少个,大家用的都是同一个static属性
3 log4j记录的是当前类的日志,不是每个实例的日志
4 所以只要有一个记录就可以了

       Log4j是帮助开发人员进行日志输出管理的 API类库。它最重要的特点就可以配置文件灵活的设置日志信息的优先级、日志信息的输出目的地以及日志信息的输出格式。Log4j除了可以记录程序运行日 志信息外还有一重要的功能就是用来显示调试信息。很多程序员经常会使用System.out.println语句输出某个变量值的方法进行调试。这样会带 来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些语句注释掉。若哪天又需调试变 量值,则只能再 一行行去掉这些注释恢复System.out.println语句。使用log4j可以很好的处理类似情况:使用"DEBUG"等级输出会类似 System.out.println,开发后期不需要输出调试时可以把等级根据需要调高,如调到"ERROR"等级,只有出错错误时才输出

使用步骤:

1.导入jar包:aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAAAZCAIAAABRmzD/AAAD2UlEQVRoge2ZQU8TQRTH+wG8efPgyXjCePCim3g3XLwRiKKJkpED8YBoUhCCDYI1lGxChUMDBhKFGKQlkY2BNKQEUG4YqFlYKF1aumyZwibb1Vhr8NB2O2V2O4UC7Yb9Z9JsZ+a9vp3fvLezqeXAlKFkKXUApo4mE5jBZAIzmAjAWF6cmFt+P/md2CbmlllePJugz7MIwNy+Jf9aQFGU35ji8bh6rSiKfy3g9i2dTdDnWQRgfWMzsVgsmUz+Q5RMJuPxuLQ6l0gk1J5YLNY3NoM5YIAFMCcVLEdTFormTsqdIcMgAKNHpiCEfxElEglZlmPT3bDnpqIoaj+EkB6ZwhwUD4wBlszykFaKoyntYQZY0tI1z7HNztcyK2dg9qFJURT/IJIkKfrVvvv66v7+/u6PKUVRUv2iKNqHJjEHxQLjaCrfMh+apz2TAWovAyx4PPlsU6MnVySKFgGYzeUWBOFXRrIs73idYtslQRB2vtiiHVdlWU4NCYJgc7kxB8UB42jKAgAgAkvveYY8E59CsC3A55mKAKzFORoOh+WMJEkSmy+mPlMXkiSlhsLhcItzFHOAAkMLDUpR7adoGl2e9N7OLhlps5MXVzPD8thq/iLamclO5JZSwwwoqDIcWQRgTY5hnueljCCE4tsbPM/vPL8AIYQQhkKhSCSyt7fH83yTYxhzoAJDHkUH6MKhS8jRVHaSOnBiwDia0sOlY0uiyNEAL7YphqdVRQnAKjs+o21jYyMQCIRtV4Ke9kAgEAqFXtAf7IPjW1tb6+vrDV0uzEEG2OFbz9z0oX71K9KvBQxJSu4At8aVsxe0pGWr4y9332A5droPPQKwa4+daKtt7a/vHLjX8q6m2VnfOeAam4pEIjXNzjeDbpZl69qdmIM8wCia0wOGLAJ6UDtuhukXwry2eu7UMNBdgKZdCYHVWntqRx6hjZldZGYXPd4Fj/cby22wLPuwrd8+6Pb7/bXWHsyBfklMf9EtiaiL45RE9fCt+xwiZKdWUch1iMxAym1JgVU1dl3vq0JbtbW3xtpbbe190uEKBoMPWvu6BsaDweDKykpVYxfmoIBDRzadDh06smZFAcNeqgBTCDAsLTV2ABI6AGWRYQvPbuFtNVfb29uCIHAcd7fhVbHh5D82lMkrUUnDIADzgYqf3ZVo84GKp46PaItGoxDCzc3NO+Dl0QPgaConBQm8yuCdqLRhEIBNV1/Gm4ApGo1+8kxWNeElsQAhJwzddUiXtVKnVxmEQQDm8c7XtTpu328ktrpWh8c7fzZBn2eZf2AaTCYwg8kEZjCZwAwmE5jB9B/S6ehOWYqOSAAAAABJRU5ErkJggg==" alt="" />

2. 在项目根目录(src)下添加配置文件log4j.properties(可以修改第一行代码来设置等级和格式)

aaarticlea/png;base64,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" alt="" />

 #设置logger级别DEBUG、INFO、WRNING、ERROR和输出格式A、B、C或D
log4j.rootLogger=DEBUG, A #输出到控制台
log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n #输出到E盘的log.log文件
log4j.appender.B=org.apache.log4j.FileAppender
log4j.appender.B.File=E:\\log.log
log4j.appender.B.layout=org.apache.log4j.SimpleLayout #输出到E盘的log.html文件
log4j.appender.C=org.apache.log4j.RollingFileAppender
log4j.appender.C.File=E:\\log.html
log4j.appender.C.MaxFileSize=1000KB
log4j.appender.C.MaxBackupIndex=10
log4j.appender.C.layout=org.apache.log4j.HTMLLayout log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=E:\\log.log
log4j.appender.D.layout=org.apache.log4j.TTCCLayout

如果需要输出到多个位置的时候可以逗号隔开,比如:   log4j.rootLogger=info, A, B

 3.使用日志记录器(注意Logger的包名是org.apache.log4j.Logger)

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; import org.apache.log4j.Logger;
import org.junit.Test;
public class Log4jDemo {
@Test
public void test1(){
// 获得log4j对象
Logger logger = Logger.getLogger(Log4jDemo.class);
FileReader fileReader = null;
try {
fileReader=new FileReader("log4j.properties");
logger.info("begain to read!!!!!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
logger.fatal("这是fatal");
logger.error(e.getMessage(),e);
logger.error("系统找不到指定文件");
logger.warn("这是警告!");
logger.info("这是信息!!!");
// debug经常用于调试程序
logger.debug("这是debug!!!");
}
try {
fileReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error("file not find", e);
}
}
}

4.结果:

2017-07-17 09:36:13 [Log4jDemo]-[FATAL] 这是fatal
2017-07-17 09:36:13 [Log4jDemo]-[ERROR] log4j.properties (系统找不到指定的文件。)
java.io.FileNotFoundException: log4j.properties (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
at Log4jDemo.test1(Log4jDemo.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
2017-07-17 09:36:13 [Log4jDemo]-[ERROR] 系统找不到指定文件
2017-07-17 09:36:13 [Log4jDemo]-[WARN] 这是警告!
2017-07-17 09:36:13 [Log4jDemo]-[INFO] 这是信息!!!
2017-07-17 09:36:13 [Log4jDemo]-[DEBUG] 这是debug!!!

测试2

1. logger.error(e.getMessage()):只输出错误信息,不输出其他信息

package danger.test;

import org.apache.log4j.Logger;
import org.junit.Test; public class Log4jTest {
Logger logger = Logger.getLogger(Log4jTest.class);
@Test
public void test(){
try {
int i = 1/0;
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
}
}
}
package danger.test; import org.apache.log4j.Logger;
import org.junit.Test; public class Log4jTest {
Logger logger = Logger.getLogger(Log4jTest.class);
@Test
public void test(){
try {
int i = 1/0;
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
}
}
}
ERROR [main] - / by zero

2.logger.error(e.getMessage(),e) 输出具体信息与异常对象

package danger.test;

import org.apache.log4j.Logger;
import org.junit.Test; public class Log4jTest {
Logger logger = Logger.getLogger(Log4jTest.class);
@Test
public void test(){
try {
int i = 1/0;
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage(),e);
}
}
}
ERROR [main] - / by zero
java.lang.ArithmeticException: / by zero
at danger.test.Log4jTest.test(Log4jTest.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

总结:


1. Logger对象的获取和创建

Logger被指定为实体,由一个String类的名字识别。Logger的名字是大小写敏感的,且名字之间具有继承关系,子名用父名作为前缀,用点“.”分隔,例如x.y是x.y.z的父亲。
root Logger(根Logger)是所有Logger的祖先,它有如下属性:
         1.它总是存在的。
         2.它不可以通过名字获得。
root Logger可以通过以下语句获得:

public static Logger Logger.getRootLogger();

或:

static Logger Logger.getLogger(Class clazz)

其中调用Logger.getLogger(Class clazz)是目前ogger对象最理想的方法

2. 日志级别
每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:
A:off         最高等级,用于关闭所有日志记录。
B:fatal       指出每个严重的错误事件将会导致应用程序的退出。
C:error      指出虽然发生错误事件,但仍然不影响系统的继续运行。
D:warm     表明会出现潜在的错误情形。
E:info         一般和在粗粒度级别上,强调应用程序的运行全程。
F:debug     一般用于细粒度级别上,对调试应用程序非常有帮助。
G:all           最低等级,用于打开所有日志记录。


面这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是
error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。例如,如果使用b了info级别,则应用程
序中所有低于info级别的日志信息(如debug)将不会被打印出来

3.输出端Appender
Appender用来指定日志信息输出到哪个地方,可以同时指定多个输出目的地。Log4j允许将信息输出到许多不同的输出设备中,一个log信息输出目的地就叫做一个Appender。

个Logger都可以拥有一个或多个Appender,每个Appender表示一个日志的输出目的地。可以使用
Logger.addAppender(Appender
app)为Logger增加一个Appender,也可以使用Logger.removeAppender(Appender
app)为Logger删除一个Appender。
以下为Log4j几种常用的输出目的地。
a:org.apache.log4j.ConsoleAppender:将日志信息输出到控制台。
b:org.apache.log4j.FileAppender:将日志信息输出到一个文件。
c:org.apache.log4j.DailyRollingFileAppender:将日志信息输出到一个日志文件,并且每天输出到一个新的日志文件。
d:org.apache.log4j.RollingFileAppender:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。
e:org.apache.log4j.WriteAppender:将日志信息以流格式发送到任意指定地方。
f::org.apache.log4j.jdbc.JDBCAppender:通过JDBC把日志信息输出到数据库中

4. 日志格式化器Layout
有三种:
HTMLLayout:格式化日志输出为HTML表格形式:如下
SimpleLayout:以一种非常简单的方式格式化日志输出,它打印三项内容:级别-信息
例:INFO - info
PatternLayout::根据指定的转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转化模式格式

总结:log4j.appender.stdout.Target=System.out,意味着控制台输出标准信息,log4j.appender.stdout.Target=System.err输出错误信息

log4j日志日记记录使用教程的更多相关文章

  1. java Web应用配置log4j日志记录

    公司启动全国支票影像系统,有这样一个功能是和消息中间件打交道,需要记录每一个报文出错情况,因为方便后期开发人员的调试,我选用了log4j作为日志记录,好了废话不多说了! 第一步:首先建立一个WEB工程 ...

  2. log4j日志输出使用教程

    Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...

  3. ELK环境配置+log4j日志记录

    ELK环境配置+log4j日志记录 1. 背景介绍 在大数据时代,日志记录和管理变得尤为重要. 以往的文件记录日志的形式,既查询起来又不方便,又造成日志在服务器上分散存储,管理起来相当麻烦, 想根据一 ...

  4. Hibernate 使用log4j日志记录

    日志记录使程序员能够将日志详细信息永久写入文件.这是我们以后在开发当中非常重要的一步. Hibernate使用log4j日志记录,我们需要以下几个步骤: 1.导入jar包: (1)这是hibernat ...

  5. log4j日志文件 log4j.xml log4j.properties配置

    1,导入log4j  jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...

  6. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  7. 记一次log4j日志文件输出错误的解决

    log4j错误信息:log4j:ERROR Failed to rename [D:/logs/wmts_] to [D:/logs/wmts_2015-12-21.log ]. 起因:部门网站使用B ...

  8. log4j日志输出到web项目指定文件夹

    感谢 eric2500 的这篇文章:http://www.cxyclub.cn/n/27860/ 摘要:尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终在eric2500的指导 ...

  9. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

随机推荐

  1. python的多线程到底有没有用?

    在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡.而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉.这是真的吗? ...

  2. /dev/null与/dev/zero区别

    /dev/null和/dev/zero的区别 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件.该设备无穷尽 ...

  3. [学习笔记]Dsu On Tree

    [dsu on tree][学习笔记] - Candy? - 博客园 题单: 也称:树上启发式合并 可以解决绝大部分不带修改的离线询问的子树查询问题 流程: 1.重链剖分找重儿子 2.sol:全局用桶 ...

  4. 洛谷P4383 林克卡特树

    题意:树上最长不相交k条链. #include <cstdio> #include <algorithm> #include <cstring> typedef l ...

  5. A1073. Scientific Notation

    Scientific notation is the way that scientists easily handle very large numbers or very small number ...

  6. 【java】详解native方法的使用

    目录结构: contents structure [+] 关于native关键字 使用native关键字 使用步骤 案例 编写.java文件 编译.java文件 获得.h文件 编写hello.cpp文 ...

  7. Hadoop基础-网络拓扑机架感知及其实现

    Hadoop基础-网络拓扑机架感知及其实现 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网络拓扑结构 在本地网络中,两个节点被称为“彼此近邻”是什么意思?在海量数据处理中,其 ...

  8. 第一模块:python基础语法

    Python基础[day01]:python介绍发展史(一) Python基础[day01]:Hello World程序(二) Python基础[day01]:表达式if ...else语句(三) P ...

  9. sudo 找不到命令 go

    错误描述 环境 CentOS7.1 x64 golang 1.9.3 golang目录:/home/moonlightwatch/go/ 环境变量配置: # /etc/profile export G ...

  10. Log4net(一)-——配置文件

    一.Log4Net框架介绍 Log4net 是 Apache 下一个开放源码的项目,它是Log4j 的一个克隆版.Log4net中定义了多种日志信息输出模式.它可以根据需要将日志输出到控制台,文本文件 ...