浅谈log4j-4-不同目的地(转)
public class DifferentAppender { private static Logger logger=Logger.getLogger(DifferentAppender.class); public static void main(String[] args) {
//输出格式
String pattern="[%d] - %l - %p - %m%n";
Layout layout=new PatternLayout(pattern); //输出目的地
Appender appender= null;
//1控制台
// appender=new ConsoleAppender(layout);
//logger.addAppender(appender); /**
* 2)org.apache.log4j.FileAppender(将日志信息输出到一个文件)
* 将日志信息输出到文件中时可以设置一些控制属性,比如:
* 1)filename 日志文件的名称,日志文件的全路径
* 2)fileAppend 控制日志信息是否被附加到同一个文件的末尾,默认为true,意味着日志信息会被附加到同一文件的末尾
* 3)bufferedIO 控制日志信息是否写入缓存,默认为false,意味着日志信息不会写入缓存之中
* 4)bufferSize 如果 bufferedI/O 启用,表示缓冲区的大小,默认设置为8KB
*/
// try {
// appender=new FileAppender(layout, "log/log.txt", false);
// logger.addAppender(appender);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } /**
* 3)org.apache.log4j.DailyRollingFileAppender(将日志信息输出到一个文件,但是这个文件是可控的,可以配置多久产生一个新的日志信息文件),
* DailyRollingFileAppender 继承自 FileAppender,所以他有 FileAppender 的所有非私属性,同时他也多了一个控制何时产生一个新的日志文件的属性 datePattern
* datePattern 有以下几种属性值:
* 1:'.'yyyy-MM Rollover at the beginning of each month
* At midnight of May 31st, 2002 /foo/bar.log will be copied to /foo/bar.log.2002-05.
* Logging for the month of June will be output to /foo/bar.log until it is also rolled over the next month. * 2:'.'yyyy-ww Rollover at the first day of each week.
* The first day of the week depends on the locale.
* Assuming the first day of the week is Sunday, on Saturday midnight, June 9th 2002, the file /foo/bar.log will be copied to /foo/bar.log.2002-23.
* Logging for the 24th week of 2002 will be output to /foo/bar.log until it is rolled over the next week. * 3:'.'yyyy-MM-dd Rollover at midnight each day.
* At midnight, on March 8th, 2002, /foo/bar.log will be copied to /foo/bar.log.2002-03-08.
* Logging for the 9th day of March will be output to /foo/bar.log until it is rolled over the next day. * 4:'.'yyyy-MM-dd-a Rollover at midnight and midday of each day.
* At noon, on March 9th, 2002, /foo/bar.log will be copied to /foo/bar.log.2002-03-09-AM.
* Logging for the afternoon of the 9th will be output to /foo/bar.log until it is rolled over at midnight. * 5:'.'yyyy-MM-dd-HH Rollover at the top of every hour.
* At approximately 11:00.000 o'clock on March 9th, 2002, /foo/bar.log will be copied to /foo/bar.log.2002-03-09-10.
* Logging for the 11th hour of the 9th of March will be output to /foo/bar.log until it is rolled over at the beginning of the next hour. * 6:'.'yyyy-MM-dd-HH-mm Rollover at the beginning of every minute.
* At approximately 11:23,000, on March 9th, 2001, /foo/bar.log will be copied to /foo/bar.log.2001-03-09-10-22.
* Logging for the minute of 11:23 (9th of March) will be output to /foo/bar.log until it is rolled over the next minute.
*
* For example, if the File option is set to /foo/bar.log and the DatePattern set to '.'yyyy-MM-dd, on 2001-02-16 at midnight,
* the logging file /foo/bar.log will be copied to /foo/bar.log.2001-02-16 and logging for 2001-02-17 will continue in /foo/bar.log
* until it rolls over the next day.
*
* 上面是API中的原文,大概的意思是这样的 DailyRollingFileAppender 这个日志文件存储器的生成原则是根据配置的 datePattern 来决定的,比如:
* 我们有一个日志文件 /foo/bar.log 我们设置的 datePattern 是 '.'yyyy-MM-dd,在2001-02-16当天的凌晨,就会生成一个新的日志文件了
* 这个日志文件的名字是 /foo/bar.log.2001-02-16,这个文件的内容使从 /foo/bar.log 这个文件中拷贝过来的
* 2001-02-17当天产生的日志信息,会继续存放在日志文件 /foo/bar.log 中,以此类推,会不断的产生新的日志文件,过一天就会产生一个
*
* datePattern 有如上六种常见的重新记录日志的规则,翻译成中文大概意思如下所示:
* 1:'.'yyyy-MM Rollover at the beginning of each month 每个月的月初,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件 * 2:'.'yyyy-ww Rollover at the first day of each week. 每个周的第一天,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件 * 3:'.'yyyy-MM-dd Rollover at midnight each day. 每天的凌晨,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件 * 4:'.'yyyy-MM-dd-a Rollover at midnight and midday of each day. 每天的凌晨和中午,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件 * 5:'.'yyyy-MM-dd-HH Rollover at the top of every hour.每小时结束,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件 * 6:'.'yyyy-MM-dd-HH-mm Rollover at the beginning of every minute.每分钟的开始,将当前日志文件复制一份,并且在原文件重新记录日志信息,会根据原文件的名称创建一个新的文件
*/ // try {
// appender = new DailyRollingFileAppender(layout,"log/log.txt","'.'yyyy-MM-dd-HH-mm");
// logger.addAppender(appender);
// } catch (IOException e) {
// e.printStackTrace();
// } /**
* 4)org.apache.log4j.RollingFileAppender(将日志信息输出到一个文件,但是这个文件是可控的,可以指定当文件大小到达指定尺寸的时候产生一个新的文件)
* RollingFileAppender 继承自 FileAppender,所以他有 FileAppender 的所有非私属性,同时他也多两个控制产生新日志文件的属性,如下所示:
*
* 1)maxFileSize 当日志文件的大小达到此值时,会产生新的日志文件,默认值是10MB
* 2)maxBackupIndex 此属性表示要创建的备份文件的最大数量,默认值是1,如果此值为零,则不会产生备份的文件
*
* 如果进行如下的设置,setMaximumFileSize(2L) setMaxBackupIndex(5) 那么产生日志文件的方式是这样的
* 第一次运行程序会产生两个日志文件
* testRollingFileAppender.log testRollingFileAppender.log.1
* 第二次运行程序会产生三个日志文件
* testRollingFileAppender.log testRollingFileAppender.log.1 testRollingFileAppender.log.2
* 。。。
* 第五次运行程序会产生六个日志文件
* testRollingFileAppender.log testRollingFileAppender.log.1 testRollingFileAppender.log.2 。。。 testRollingFileAppender.log.5
* 第n(n>5)次运行程序仍会产生六个日志文件
* testRollingFileAppender.log testRollingFileAppender.log.1 testRollingFileAppender.log.2 。。。 testRollingFileAppender.log.5
*
* 从上面的分析我们,可以看到,当生成的日志备份等于自己定义的个数时就不在生成新的备份文件了,至少从日志文件的名字上看是这样的
* 但是好玩的地方在于,下面再次运行程序的时候每个日志文件都会发生变化,日志文件从1到5总是保持最新的五份
* 当我们再次运行程序的时候,会生成一份新的日志文件,它会被命名1,原来的1会被重命名2,原来的2会被重命名3,以此类推,直到所有的日志文件都重新命名为止
* 最久的那份日志文件会被删除掉
*/ // try {
// RollingFileAppender rollingFileAppender = new RollingFileAppender(layout,"log/log.txt");
// rollingFileAppender.setMaximumFileSize(2L);
// rollingFileAppender.setMaxBackupIndex(5);
// appender = rollingFileAppender;
// logger.addAppender(appender);
// } catch (IOException e) {
// e.printStackTrace();
// } /**
* 5)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
* 这个功能很强大,我们自定义日志信息的流向,这里为了方便演示,我就将他他输出到一个文件之中了
*/
OutputStream os = null;
try {
os= new FileOutputStream("log/log.txt");
appender= new WriterAppender(layout,os);
logger.addAppender(appender);
} catch (FileNotFoundException e) {
e.printStackTrace();
} //输出
logger.warn(" this is a warn!!!");
logger.info(" this is a info!!!");
logger.debug(" this is a debug!!!");
logger.error(" this is a error!!!"); } }
浅谈log4j-4-不同目的地(转)的更多相关文章
- 浅谈Log4j和Log4j2的区别
相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程.我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代. log4j是Apache的 ...
- 浅谈Log4j
1 什么是Log4j Log4j 是Apache为Java提供的日志管理工具.为了你快速理解Log4j的作用,我们用下面的代码说明Log4j的作用.我们为了调试程序,总是需要在程序使用System.o ...
- 浅谈一下SSI+Oracle框架的整合搭建
浅谈一下SSI+Oracle框架的整合搭建 最近换了一家公司,公司几乎所有的项目都采用的是Struts2+Spring+Ibatis+Oracle的架构,上一个东家一般用的就是JSF+Spring,所 ...
- 谁还没遇上过NoClassDefFoundError咋地——浅谈字节码生成与热部署
谁还没遇上过NoClassDefFoundError咋地--浅谈字节码生成与热部署 前言 在Java程序员的世界里,NoClassDefFoundError是一类相当令人厌恶的错误,因为这类错误通常非 ...
- 浅谈Spring中的Quartz配置
浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- 浅谈传输层协议TCP和UDP
在当今因特网的层次结构中,传输层的协议主要有两种,其一为Transmission Control Protocol,即TCP:其二为User Datagram Protocol,即UDP. 1.TCP ...
- 浅谈REST API
浅谈REST API 说明: 本文部分内容根据其它网络文章编写,如有版权问题请及时通知. 背景 发迹于互联网的REST,在国内国外混得可谓是风生水起,如今又进入电信行业的视野,连TMF都将其作为战略项 ...
- 浅谈Normalize.css
浅谈Normalize.css 一.总结 1.Normalize.css:它在默认的HTML元素样式上提供了跨浏览器的高度一致性,花了几百个小时来努力研究不同浏览器的默认样式的差异. 2.优于rese ...
- 浅谈DFS,BFS,IDFS,A*等算法
搜索是编程的基础,是必须掌握的技能.--王主任 搜索分为盲目搜索和启发搜索 下面列举OI常用的盲目搜索: 1.dijkstra 2.SPFA 3.bfs 4.dfs 5.双向bfs 6.迭代加深搜索( ...
随机推荐
- unity中让摄像机移动到鼠标点击的位置和鼠标控制平移视角
private Vector3 targetVector3; private float movespeed=0.5f; private bool IsOver = true; private Gam ...
- js 操作dom
childNodes 返回当前元素所有子元素的数组 parentNode 返回元素的父节点 document.createElement(tagName) 文档对象上的createElement方法可 ...
- Date与时间戳的相互转换(Java)
1.Date对象转换为时间戳 Date date = new Date(); long times = date.getTime(); System.out.println(times); 效果如 ...
- UBUNTU安装 Rabbitvsc可视化版本控制客户端软件
sudo add-apt-repository ppa:rabbitvcs/ppa sudo apt-get update sudo apt-get install rabbitvcs-core ra ...
- it网站
1:http://www.importnew.com/ importnew 专注于java的论坛 2:Github是最活跃的开源代码库和版本控制平台,可以说是程序员当中知名度最高的技术社区.各 ...
- L257 论述型作文模板
一引出相同观点: 1.With the development of science and technology, more and more people believe that...随着科技的 ...
- LeetCode子集问题
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(子集当中不包括重复的元素) 代码如下: def subsets(nums): target=[[]] for num in nums ...
- 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !
如何用前端页面原型生成对应的代码一直是我们关注的问题,本文作者根据 pix2code 等论文构建了一个强大的前端代码生成模型,并详细解释了如何利用 LSTM 与 CNN 将设计原型编写为 HTML 和 ...
- 句柄线程做参数和PostMessage的用法
当我们启动一个线程,并且要给线程函数传递的参数是窗口句柄时,我们应该这样做: HWND hHwnd = GetSafeHwnd(); HANDLE hThread; DWORd dwThreadId; ...
- Oralce 11g新特性 转载
Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(Informat ...