(未完成,待修改)

一、安装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)

log4j linux如果日志目录不存在,Java日志库学习笔记相关推荐

  1. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  2. java/android 设计模式学习笔记(1)---单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  3. java/android 设计模式学习笔记(6)---适配器模式

    这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...

  4. java/android 设计模式学习笔记(8)---桥接模式

    这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...

  5. java/android 设计模式学习笔记(3)---工厂方法模式

    这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或 ...

  6. java/android 设计模式学习笔记(7)---装饰者模式

    这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是 ...

  7. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  8. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. 开发者测试:可测试性是设计出来的
  2. html 猫链接怎么写,html超链接下划线应该加入吗?
  3. Flash Builder4.7极其简单破解方法-三步搞定(亲测)
  4. VTK:图片之ImagePermute
  5. linux 后台计算,科学网-如何在Linux中做批处理和后台计算-张彦的博文
  6. Android IDA 动态调试最完善攻略,跨过各种坑
  7. 台式电脑耳机插孔在哪_一图教你学会电脑主机后面各接口正确接线
  8. 安装版win7安装时分区
  9. B3log 分布式社区的 Java 博客端节点系统
  10. Skara 是研究JDK源代码的工具
  11. android禁止锁屏保持常亮
  12. springboot整合阿里云OSS存储(对象存储)图文详解-———入门操作指南。
  13. 网页前端 网页换肤(js)
  14. Excel 求满足多个条件(2个条件,3个条件,....)的行的指定列的和公式,Excel根据汉字描述生成公式工具,支持合并单元格
  15. OpenCV颜色空间——Lab颜色空间
  16. 二氧化硅改性活性炭|SiO2改性的V2O5-MoO3/TiO2催化剂|SiO2改性MCM-22分子筛上联苯|纳米SiO2改性环氧涂层海洋腐蚀规律
  17. Idea的k8s插件
  18. java毕设项目进出货管理系统(附源码)
  19. 上位机软件用什么写的_为什么这么多Java开发者会觉得用Java写网站很难?
  20. vivo android框架服务,vivo服务安全插件最新版本下载

热门文章

  1. 利用Switch实现两台计算机通信
  2. 续篇:新型Lamda版Html.RenderAction
  3. QT 4.5 windows版本 安装问题 及 Junction 使用
  4. 新项目入手-》解决方案之一
  5. MySQL字符集的一个坑
  6. WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
  7. 分类算法:决策树(C4.5)
  8. ios游戏开发 Sprite Kit教程:初学者 2
  9. 用IP地址的用途理解Loopback接口
  10. 03 在百度地图上定位到指定位置