log4j linux如果日志目录不存在,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)
log4j linux如果日志目录不存在,Java日志库学习笔记相关推荐
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- java/android 设计模式学习笔记(1)---单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- java/android 设计模式学习笔记(6)---适配器模式
这篇来介绍一下适配器模式(Adapter Pattern),适配器模式在开发中使用的频率也是很高的,像 ListView 和 RecyclerView 的 Adapter 等都是使用的适配器模式.在我 ...
- java/android 设计模式学习笔记(8)---桥接模式
这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...
- java/android 设计模式学习笔记(3)---工厂方法模式
这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或 ...
- java/android 设计模式学习笔记(7)---装饰者模式
这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是 ...
- Java微服务学习笔记(一):微服务架构的概念理解
Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...
- Java快速入门学习笔记9 | Java语言中的方法
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
- Java快速入门学习笔记8 | Java语言中的数组
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
最新文章
- 开发者测试:可测试性是设计出来的
- html 猫链接怎么写,html超链接下划线应该加入吗?
- Flash Builder4.7极其简单破解方法-三步搞定(亲测)
- VTK:图片之ImagePermute
- linux 后台计算,科学网-如何在Linux中做批处理和后台计算-张彦的博文
- Android IDA 动态调试最完善攻略,跨过各种坑
- 台式电脑耳机插孔在哪_一图教你学会电脑主机后面各接口正确接线
- 安装版win7安装时分区
- B3log 分布式社区的 Java 博客端节点系统
- Skara 是研究JDK源代码的工具
- android禁止锁屏保持常亮
- springboot整合阿里云OSS存储(对象存储)图文详解-———入门操作指南。
- 网页前端 网页换肤(js)
- Excel 求满足多个条件(2个条件,3个条件,....)的行的指定列的和公式,Excel根据汉字描述生成公式工具,支持合并单元格
- OpenCV颜色空间——Lab颜色空间
- 二氧化硅改性活性炭|SiO2改性的V2O5-MoO3/TiO2催化剂|SiO2改性MCM-22分子筛上联苯|纳米SiO2改性环氧涂层海洋腐蚀规律
- Idea的k8s插件
- java毕设项目进出货管理系统(附源码)
- 上位机软件用什么写的_为什么这么多Java开发者会觉得用Java写网站很难?
- vivo android框架服务,vivo服务安全插件最新版本下载