log4j记录日志到指定文件
- 新建类文件:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator; /**
* 记录日志到指定文件
*
* @author He
* @date 2018/5/16
*/
public class Log4jDemo { static Logger logger = Logger.getLogger(Log4jDemo.class); public static void main(String[] args) {
PropertyConfigurator.configure("config/log4j.properties");
logger.info("我记录在Log4jDemo 文件中....");
logger.error("在Log4jDemo 文件中出现异常....");
}
}
2. 在项目根目录下(即与src平级)创建config文件夹,新建log4j.properties 文件
配置如下:
# 声明日志类型
log4j.rootLogger = INFO,log4jDemo,test # 配置1 - 即日志Id名为 com.exampl.log.Log4jDemo 的日志配置(通俗来讲就是日志的标识,只不过该标识可在多个类中调用)
log4j.logger.log4jDemo=com.exampl.log.Log4jDemo
log4j.additivity.log4jDemo = false
log4j.appender.log4jDemo=org.apache.log4j.RollingFileAppender
# 输出级别(如果定义的ERROR级别,那么打印的INFO级别的日志就不会记录在文件中,因为INFO的级别比ERROR要)
log4j.appender.log4jDemo.Threshold=ERROR
# 输出的日志文件位置及文件名称
log4j.appender.log4jDemo.File=logs/Log4jDemo.log
# 布局类型
log4j.appender.log4jDemo.layout=org.apache.log4j.PatternLayout
# 布局模板
log4j.appender.log4jDemo.layout.ConversionPattern=%d %-5p [%l] - %m%n
# 输出的日志文件的最大文件大小,单位b(字节)
log4j.appender.log4jDemo.MaxFileSize=5242880
# 日志的循环周期
log4j.appender.log4jDemo.MaxBackupIndex=3
运行main方法 日志输出如下:
3.关于log4j.properties 一些配置:
- 日志输出级别,共有5级:
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
- Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
- 打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
- 在代码中初始化Logger:
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
- 日志文件生成周期的定义:
rollover次数 | 输出的目标 | 压缩的日志文件 | 描述 |
---|---|---|---|
1 | foo.log |
foo-1.log | 在第一次rollover 时,foo.log会被重命名为foo-1.log。同时会创建一个新的foo.log 并开始写入。 |
2 | foo.log |
foo-1.log, foo-2.log | 在第二次发生rollover 时,foo-1.log会重命名为foo-2.log并且foo.log会重命名为foo-1.log。同时会创建一个新的foo.log 并开始写入。 |
3 | foo.log | foo-1.log, foo-2.log, foo-3.log | 在第三次发生rollover 时,foo-2.log会重命名为foo-3.log。foo-1.log重命名为foo-2.log,foo.log会重命名为foo-1.log。同时会创建一个新的foo.log 并开始写入。 |
4 | foo.log | foo-1.log, foo-2.log, foo-3.log | 在第四次和随后的rollover 时,foo-3.log会被删除,foo-2.log重命名为foo-3.log。foo-1.log重命名为foo-2.log。foo.log重命名为foo-1.log。后面同理 |
每次当文件达到指定文件大小(MaxFileSize)时,日志文件就会按上述规则来生成。
log4j记录日志到指定文件的更多相关文章
- log4j 根据类名指定文件
log4j.logger.io.netty=INFO, stdout, spiderlog4j.logger.com.ld.net.spider=INFO, stdout, spider log4j. ...
- 有效Log4j按指定级别定向输出日志到指定的输出文件地址配置Threshold,log4j中如何屏蔽父logger输出源rootlogger的additivity配置,log4j向多个文件记录日志
log4j向多个文件记录日志 关键配置,指定想要的日志级别信息输出到指定的日志文件中: log4j.appender.errorLogger.Threshold=ERROR #扩展,可指定只在子类自己 ...
- 浅谈如何使用Log4j记录日志
一.什么是log4j Log4J是Apache的一个开放源代码的项目.通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格 ...
- 使用log4j记录日志
目录 log4j的优点 导入log4j的jar包 log4j的错误级别 log4j日志的输出目的地 log4j的配置示例 log4j的全局配置讲解 控制台日志的配置讲解 日志输出文件的配置讲解 使用l ...
- JAVA中使用LOG4J记录日志(转)
在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...
- JAVA中使用LOG4J记录日志
在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...
- log4j输出日志到文件
输出端Appender Appender用来指定日志信息输出到哪个地方,可以同时指定多个输出目的地.Log4j允许将信息输出到许多不同的输出设备中,一个log信息输出目的地就叫做一个Appender. ...
- 使用commons-logging和log4j记录日志
一,为什么要使用commons-logging+log4j? commons-logging和log4j都是Apache下的开源项目.commons-logging的目的是为“所有的Java日志实现” ...
- log4j源码解析-文件解析
承接前文log4j源码解析,前文主要介绍了log4j的文件加载方式以及Logger对象创建.本文将在此基础上具体看下log4j是如何解析文件并输出我们所常见的日志格式 附例 文件的加载方式,我们就选举 ...
随机推荐
- Dubbo、Zookeeper集群搭建及Rose使用心得(一)
接触这个两三月了,是时候总结一下使用的方法以及心得体会了.我是一个菜鸟,下面写的如有错误,还请各位前辈指出.废话不多说,正式开始. 一.简介 Dubbo是Alibaba开源的分布式服务框架,它最大的特 ...
- PDF文档小技巧整理一览
1.福昕阅读器文档背景修改为保护眼睛的颜色? 1)文件 -> 偏好设置 -> 访问 -> 勾选 "改变文档颜色" 2)选择 '自定义颜色'->'页面背景颜色 ...
- Qt 文档编辑设置
该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 前面已经在主窗口中添加了菜单和工具栏,这一篇中我们将实现基本的文本编辑功能 ...
- vue 混入的理解
- IOS的__bridge
使用 __bridge 关键字来实现id类型与void*类型的相互转换.看下面的例子. id obj = [[NSObject alloc] init]; void *p = (__bridge vo ...
- Linux启动的流程
2017年1月10日, 星期二 Linux启动的流程 null
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第八课 调度监听器
第八课 调度监听器 调度监听器和触发监听器和触发监听器.作业任务监听器非常相似,只是调度监听器在调度器内接收通知事件,而不需要关联具体的触发器或作业任务事件. 跟调度监听器相关的事件,添加作业任务/触 ...
- [php]php总结(2)
18.数组$arr[null] = 20; //array([]=>20)$arr[] = 20;//默认为下一个下标赋值unset()可以删除数组元素,但不会重建索引array_values( ...
- Ubuntu 13.04 主机名的修改
由于某些原因,要修改Ubuntu的主机名,晚上Google了一下,要改的地方为/etc/hostname,即将里面的字符串替换为你要起的主机名即可. sudo vi /etc/hostname 修改即 ...
- HDU 1171 Big Event in HDU(01背包)
题目链接 题意:给出n个物品的价值v,每个物品有m个,设总价值为sum,求a,b.a+b=sum,且a尽可能接近b,a>=b. 题解:01背包. #include <bits/stdc++ ...