`

Java日志库学习笔记

阅读更多

(未完成,待修改)

 

 

一、安装Log4j

log4j的库文件可以在官方网站下载:

 

 

二、log4j.properties的目录搜索规则

在src/目录下创建一个log4j.properties文件,即LCF(Log Configuration File)。

默认的LCF,即log4j.properties,只能在CLASSPATH内被log4j找到。

由于Eclipse中src下的非java文件会自动复制到bin目录(CLASSPATH内)下,所以log4j能找到bin/log4j.properties。

对于打包好的jar,log4j.properties最好放在jar外,把它的目录包含于classpath内。

或者用特定的LCF文件名(见下)精确地定位它,而不必放在CLASSPATH内。

 

三、指定特定的LCF文件名(属性文件名不是log4j.properties)

有两种方法可以让LCF指向一个.properties文件而非classpath下的log4j.properties:

方法一:log4j.configuration

创建TestLog4j.java:

 

编译(MinGW):

$ javac -cp log4j-1.2.16.jar *.java

运行:

$ java -cp "log4j-1.2.16.jar;." TestLog4j

因为log4j.properties文件不存在,所以出现警告:

log4j:WARN No appenders could be found for logger (TestLog4j).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Hello, world

书写log4j.properties

log4j.rootLogger=DEBUG, A1

 

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

 

log4j.logger.TestLog4j=DEBUG

然后运行(不需要重新编译,因为log4j.properties已经在classpath内):

$ java -cp "log4j-1.2.16.jar;." TestLog4j

2011-05-07 15:32:48,062 [main] INFO  TestLog4j - Entering application.

Hello, world

把log4j.properties重命名为log4j_TestLog4j.properties,然后运行:

log4j:WARN No appenders could be found for logger (TestLog4j).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Hello, world

此时使用log4j.configuration改变LCF的名称

$ java -Dlog4j.configuration=log4j_TestLog4j.properties -cp "log4j-1.2.16.jar;." TestLog4j

2011-05-07 15:36:25,562 [main] INFO  TestLog4j - Entering application.

Hello, world

 

方法二,PropertyConfigurator.configure():

同上例,把TestLog4j.java改为

import org.apache.log4j.*;

 

public class TestLog4j {

static Logger logger = Logger.getLogger(TestLog4j.class);

 

public final static void main(String[] args) {

 

logger.info("Entering application.");

System.out.println("Hello, world");

}

}

 

运行:

$ java -cp "log4j-1.2.16.jar;." TestLog4j

2011-05-07 15:40:05,812 [main] INFO  TestLog4j - Entering application.

Hello, world

 

上述两种方法都可以把JCF指向非classpath目录下的属性文件。

而默认的log4j.properties只能放在classpath定义的范围内。

特定的LCF文件名的好处是:把多个配置文件放在和jar不同的目录下,方便管理。

不过对于调试,用log4j.properties一个配置文件就足够了(可以用#注释进行切换)。

 

四、根日志器(RootLogger,log4j.rootLogger)

log4j.rootLogger = ALL, myFileAppender, myConsoleAppender

用于指定缺省的日志级别和(一个或多个)输出器。

用log4j.rootLogger,就不需要在子级logger中重复定义日志级别和输出器。

 

五、输出器(Appender,log4j.appender.XXX)

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

定义了一个输出器A1,

然后设置其appender实现类,layout实现类,layout转换模式参数。

log4j允许一个logger装配多个appender,

也就是说可以同时把一条日志发到多个不同的目的地。

log4j可以使用预定义的appender实现,也允许自己实现appender。

org.apache.log4j.ConsoleAppender: 输出到控制台

org.apache.log4j.jdbc.JDBCAppender:  写入数据库

org.apache.log4j.net.JMSAppender: 写入Java消息队列

org.apache.log4j.nt.NTEventLogAppender: 写入NT事件日志

org.apache.log4j.net.SyslogAppender: 写入Unix/Linux Syslog

org.apache.log4j.lf5.LF5Appender: 写入基于Swing的控制台

org.apache.log4j.net.TelnetAppender: 用远程登陆的方式监听日志

org.apache.log4j.net.SocketAppender: 写入套接字

 

六、子日志器(Logger,log4j.logger.XXX)

log4j.logger.TestLog4j=DEBUG

它可以像RootLogger那样,可以同时定义日志级别和输出器,

但一般的做法是把输出器放在log4j.rootLogger的值中,然后用缺省值继承它。

由于约定的写法:

Logger.getLogger(<类名>.class)

所以通常子日志器的键名是log4j.logger.<名字空间>.<类名>

如果是非约定的写法:

Logger.getLogger("<日志器名>")

则键名是

log4j.logger.<日志器名>

对于log4j.logger.<名字空间>.<类名>这样的logger,可以从

log4j.logger.<名字空间>的logger中继承配置。

同样,对于名字空间的logger,可以从上一级名字空间的logger中继承配置。

 

七、日志级别(Level)

Java代码中使用的Level有6级

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

而在LCF(log4j.properties)中有8级

OFF < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < ALL

多出来的OFF和ALL用于完全禁用日志和记录所有日志。

在日志器中使用Level,例如

log4j.logger.TestLog4j=DEBUG

则表示DEBUG和DEBUG以上的日志被输出,

比DEBUG的优先级低的TRACE日志被忽略。

 

八、日志格式(Layout)

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

layout和appender一一对应地关联(不同于appender,一个logger可以和多个appender关联),

例如上面的A1.layout和A1关联。

layout向appender提供日期、事件、类名和线程状态等附加信息,

还可以定义它们和Java代码内的日志信息的组合方式。

log4j提供预定义的layout实现类。

org.apache.log4j.SimpleLayout: 简单格式

org.apache.log4j.PatternLayout: 模式格式

 

九、在Java代码中配置log4j

不推荐这种做法。

 

 

(TODO)

 

分享到:
评论

相关推荐

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    Java分布式应用学习笔记

    Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...

    java与freemarke学习笔记

    在这个"java与freemarke学习笔记"中,我们将深入探讨这两个技术的结合使用。 首先,让我们理解什么是FreeMarker。FreeMarker是一个开源的Java库,它允许开发者将业务数据与HTML模板分离。这意味着设计师可以专注于...

    java学习笔记 java学习笔记

    Java学习笔记涵盖了许多核心概念,包括面向对象编程的各个方面。以下是对这些知识点的详细解析: 1. **继承中方法的重写**: 当子类重写父类的方法时,子类方法的访问权限必须至少等于或大于父类中对应方法的访问...

    Java Spring框架学习笔记(内附源码).pdf

    在本次的Java Spring框架学习笔记中,将对Spring框架的核心概念进行详细解析,包括Spring的 IOC(控制反转)、AOP(面向切面编程)、jdbcTemplate、事务管理、Spring5新特性以及与Mybatis的整合。本学习笔记提供了...

    java基础框架学习笔记

    Java基础框架的学习是Java开发中的重要一环,涵盖了构建现代应用程序的基石。...而这份"java基础框架学习笔记"应该包含了关于这些框架的详细讲解,从基本概念到实际应用,都是值得深入研究的宝贵资料。

    java常用框架学习笔记

    ### Java常用框架学习笔记 #### Hibernate ##### 1.1 Hibernate 实现数据库操作步骤 - **导入所需的Jar包**:为了使用Hibernate框架,首先需要在项目中导入Hibernate库。这通常意味着添加一系列与Hibernate相关的...

    java学习笔记源码MD.rar

    Java学习笔记源码MD.rar是一个压缩包,其中包含了一系列关于Java编程语言的学习资料,特别是针对JVM(Java虚拟机),Spring框架以及Java多线程等内容的深入探讨。这些主题是Java开发中的核心部分,对于任何想要提升...

    Java Redis 学习笔记 Markdown+PDF 格式分享

    **Java Redis 学习笔记概览** 在Java开发中,Redis作为一个高性能的键值存储系统,常被用于缓存、消息队列、分布式锁等多种场景。本笔记将深入探讨Java与Redis的集成以及如何利用Springboot框架进行高效操作。 1. ...

    CoreJava学习笔记

    ### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...

    java web学习笔记

    Java Web学习笔记是深入理解Web开发技术的重要参考资料,尤其对于初学者来说,它提供了一条系统学习的路径。这份笔记的作者在学习过程中积累了丰富的知识,并将其归纳整理,旨在帮助那些希望进入Java Web领域的...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记主要涵盖了Java开发工具集(Java Development Kit)的第六个主要版本,这是一个重要的里程碑,因为它为开发者提供了许多新特性和改进。在这个版本中,Java平台的稳定性和性能得到了显著提升,同时...

    Java很好的学习笔记部署环境

    这篇“Java很好的学习笔记部署环境”提供了丰富的资源,旨在帮助初学者和有经验的开发者深入理解如何配置和管理Java开发和运行环境。以下将详细介绍其中涉及的关键知识点。 1. **JDK安装与配置**:Java开发工具包...

    Java常用框架学习笔记.7z

    这些"Java常用框架学习笔记.7z"的压缩包包含了五个关键的Java框架的学习资源,它们分别是Struts2、Hibernate、Spring、SpringMVC和MyBatis。这五个框架都是Java开发中的重要工具,对于理解Java后端开发的复杂性和...

    马士兵java框架hibernate学习笔记

    - **项目配置**:详细介绍了如何搭建一个包含Hibernate的Java项目,包括添加必要的库文件、配置日志环境等。 - **核心配置文件详解**:深入讲解`hibernate.cfg.xml`文件的各项配置项,如`hibernate.dialect`、`...

    java笔记,java学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Java编程语言的重要知识点,这些知识点涵盖了学习策略、控制流、格式化输出、数据类型处理以及数组初始化等方面。以下是对这些知识点的详细解析: ### 学习策略:...

    java web 学习笔记

    Java Web学习笔记主要涵盖的是与开发Web应用程序相关的Java技术,包括Servlet、JSP、过滤器、监听器、MVC框架(如Spring MVC)、会话管理、请求和响应处理、数据库连接以及各种工具的使用等。这里我们将深入探讨这些...

Global site tag (gtag.js) - Google Analytics