log4j取代System.out.pringln()(2)

2019-04-15 20:32

录着\。再次运行程序,查看文件,则\有两行。 另外,FileAppender 还有一个构造:

FileAppender(Layout layout, String filename, boolean append)

与示例的类似,只是多了一个boolean型的参数append。append参数是个开关,用来设置当程序重启,而目标文件已存在时,是向目标文件追加信息还是覆盖原来的信息,当值为true时就追加,这是FileAppender默认的,当值为false时则覆盖。此外,FileAppender还提供了setAppend方法来设置append开关。

4.org.apache.log4j.RollingFileAppender,继承了FileAppender,也是向文件输出信息,但文件大小可以限制。当文件大小超过限制时,该文件会被转为备份文件或删除,然后重新生成。文件的转换或删除与设置的备份文件最大数量有关,当数量大于0时就转为备份文件,否则(小于等于0)删除,默认的备份文件数量是1。转换备份文件非常简单,就是修改文件名,在原文件名之后加上\,例如文件test.txt,转为备份文件后文件名为\。但若同名的备份文件已存在,则会先将该备份文件删除或更名,这也与设置的备份文件最大数量有关,若达到最大数量就删除,否则更名。若备份文件更名时也遇到同样情况,则使用同样的处理方法,依此类推,直到达到设置的备份文件最大数量。备份文件更名也很简单,就是将扩展名加1,例如test.txt.1文件更名后变为test.txt.2,test.txt.2文件更名后变为test.txt.3。 示例代码:

SimpleLayout layout = new SimpleLayout();

//若文件不存在则创建文件,若文件已存在则向文件中追加内容 RollingFileAppender appender = null; try {

appender = new RollingFileAppender(layout, \ } catch(Exception e) {}

//限制备份文件的数量,本例为2个 appender.setMaxBackupIndex(2);

//限制目标文件的大小,单位字节,本例为10字节 appender.setMaximumFileSize(10);

Logger log = Logger.getLogger(Test.class); log.addAppender(appender);

log.debug(\ log.debug(\ log.debug(\

程序运行后,会在工程目录下生成test.txt、test.txt.1和test.txt.2三个文件,其中test.txt内容为空,而后两个文件则分别记录着\和\,这是怎么回事?原来由于目标文件大小被限制为10字节,而三次使用log.debug方法输出的信息都超过了10字节,这样就导致了三次备份文件转换,所以test.txt内容为空。而备份文件最大数量被设为2,因此第一次转换的备份文件就被删掉了,而后两次的则保存下来。此外,由于 test.txt转换备份文件时是先转为test.txt.1,再转为test.txt.2,因此最后test.txt.2的内

容是\,而test.txt.1是\,这点千万别弄混了。 另外,RollingFileAppender还提供了两个方法:

(1)setMaxFileSize,功能与 setMaximumFileSize一样,但参数是字符串,有两种情况:一是仅由数字组成,默认单位为字节,例如\,即表示限制文件大小为 100字节;一是由数字及存储单位组成,例如\、\、\,其中单位不区分大小写,分别表示限制文件大小为1K、1M、1G。

(2)rollOver,手动将目标文件转换为备份文件,使用起来较灵活,适用于复杂情况。 示例代码:

SimpleLayout layout = new SimpleLayout();

RollingFileAppender appender = null; try {

appender = new RollingFileAppender(layout, \ } catch(Exception e) {}

appender.setMaxBackupIndex(2);

Logger log = Logger.getLogger(Test.class); log.addAppender(appender);

log.debug(\ appender.rollOver(); log.debug(\ appender.rollOver(); log.debug(\ appender.rollOver();

这里没限制目标文件大小,但程序运行后,效果与上例相同。

5.org.apache.log4j.DailyRollingFileAppender,也继承了 FileAppender,并且也是向文件输出信息,但会根据设定的时间频率生成备份文件。 时间频率格式简介:

'.'yyyy- MM,按月生成,生成时间为每月最后一天午夜过后,例如test.txt在2005年7月31日午夜过后会被更名为test.txt.2005-07,然后重新生成。

'.'yyyy-ww,按周生成,生成时间为每周六午夜过后,例如test.txt在2005年8月13日午夜过后会被更名为 test.txt.2005-33,33表示当年第33周。

'.'yyyy-MM-dd,按天生成,生成时间为每天午夜过后,例如2005年 8月16日午夜过后,test.txt会被更名为test.txt.2005-08-16。

'.'yyyy-MM-dd-a,也是按天生成,但每天会生成两次,中午12:00过后一次,午夜过后一次,例如test.txt在2005年8月16日12:00过后会被更名为 test.txt.2005-8-16-上午,午夜过后会被更名为test.txt.2005-8-16-下午。 '.'yyyy-MM- dd-HH,按小时生成,例如test.txt在2005年8月16日12:00过后会被更名为test.txt.2005-8-16-11。

'.'yyyy-MM-dd-HH-mm,按分钟生成,例如test.txt在2005年8月16日12:00过后会被更名为 test.txt.2005-8-16-11-59。 示例代码:

SimpleLayout layout = new SimpleLayout();

DailyRollingFileAppender appender = null; try {

appender = new DailyRollingFileAppender(layout, \\

} catch(Exception e) {}

Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\

编码完成后运行程序,等一分钟后再次运行,由于我是在2005年8月17日15:42分第一次运行程序的,因此工程目录下最终有两个文件test.txt和 test.txt.2005-08-17-15-42。 6.org.apache.log4j.AsyncAppender,用于管理不同类型的Appender,也能实现同时向多个源输出信息,但其执行是异步的。 示例代码:

SimpleLayout layout = new SimpleLayout();

//向控制台输出

ConsoleAppender appender1 = null; try {

appender1 = new ConsoleAppender(layout); } catch(Exception e) {}

//向文件输出

FileAppender appender2 = null; try {

appender2 = new FileAppender(layout, \ } catch(Exception e) {}

//使用AsyncAppender实现同时向多个目标输出信息 AsyncAppender appender = new AsyncAppender(); appender.addAppender(appender1); appender.addAppender(appender2);

Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\ 此外,AsyncAppender和Logger都提供了更多的方法来管理Appender,例如getAppender、 getAllAppenders、removeAppender和removeAllAppenders,分别用来获取指定的Appender、获取全部 Appender、移除指定的Appender以及移除全部Appender。 7.org.apache.log4j.jdbc.JDBCAppender,将信息输出到数据库。 示例代码:

JDBCAppender appender = new JDBCAppender(); appender.setDriver(\

appender.setURL(\ appender.setUser(\

appender.setPassword(\

appender.setSql(\

Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\

这里使用的数据库是MySQL 5.0.4beta,用户名root,密码11111111,我在其中建了一个库zheng,包含表log4j,该表只有一个字段msg,类型为 varchar(300)。此外,本例用到的JDBC驱动可以从http://dev.mysql.com/downloads/connector/j/3.1.html下载,版本3.1.8a,下载mysql-connector-java-3.1.8a.zip文件后解压缩,需要其中的mysql-connector- java-3.1.8-bin.jar文件。下面再来看代码。由于JDBCAppender内部默认使用PatternLayout格式化输出信息,因此这里没用到SimpleLayout,而appender.setSql所设置的SQL语句就是PatternLayout所需的格式化字符串,故此其中才有\这样的字符,有关PatternLayout的具体内容后边介绍。执行后,表log4j增加一条记录,内容为\。 8.org.apache.log4j.nt.NTEventLogAppender,向Windows NT系统日志输出信息。 示例代码:

SimpleLayout layout = new SimpleLayout();

NTEventLogAppender appender = new NTEventLogAppender(\

Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\

注意,要完成此示例,还需向 C:\\WINNT\\system32文件夹(我的操作系统装在了C:\\)中复制一个名为NTEventLogAppender.dll的文件。如果跟我一样用的是Log4J 1.2.11,实在对不住,Log4J 1.2.11并未提供该文件。虽然logging-log4j-1.2.11.zip文件解压缩后,其下的src\\java\\org\\apache \\log4j\\nt文件夹中有一个make.bat文件执行后可以编译出该文件,但还需要配置,很麻烦。还好,条条大道通罗马,1.2.11不行,就换 1.2.9,可以从http://apache.justdn.org/logging/log4j/1.2.9下载,下载后解压缩logging-log4j-1.2.9.zip文件,在其下的src\\java\\org\\apache\\log4j\\nt文件夹中找到 NTEventLogAppender.dll,复制过去就可以了。程序执行后,打开\事件查看器\,选择\应用程序日志\,其中有一条来源为Java的记录,这条记录就是刚才输出的信息了。

9.org.apache.log4j.lf5.LF5Appender,执行时会弹出一个窗口,信息在该窗口中以表格的形式显示。 示例代码:

LF5Appender appender = new LF5Appender(); Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\

由于LF5Appender不需要Layout格式化输出信息,因此这里没有设置。此外LF5Appender还提供了一个setMaxNumberOfRecords方法,用来限制信息在表格中显示的行数。 10.org.apache.log4j.net.SocketAppender,以套接字方式向服务器发送日志,然后由

服务器将信息输出。 示例代码:

//指定要连接的服务器地址及端口,这里使用的是本机9090端口

SocketAppender appender = new SocketAppender(\ Logger log = Logger.getLogger(Test.class); log.addAppender(appender); log.debug(\

SocketAppender不需要设置Layout,因为SocketAppender不负责输出信息。那么如何看到信息输出的效果呢?这就需要SocketServer和 SimpleSocketServer了。 示例代码1:

package piv.zheng.log4j.test;

import org.apache.log4j.net.SocketServer;

public class TestServer {

public static void main(String[] args) {

SocketServer.main(new String[]{\\\ } }

这是 SocketServer的示例。SocketServer只有一个静态方法main,该方法意味着SocketServer不仅可以在代码中被调用,也可以用java命令执行。main方法只有一个参数,是个字符串数组,但要求必须有三个元素:元素一用来指定端口,本例为9090;元素二用来指定输出信息时需要的配置文件,该文件放在工程目录下,本例使用的test.properties内容如下:

log4j.rootLogger=, console

log4j.appender.console =org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.SimpleLayout

该配置指定 SocketServer使用ConsoleAppender以SimpleLayout格式输出信息;元素三用来指定一个路径,以存放.lcf文件,我指定的是本机的G:/YPJCCK/Log4J文件夹。.lcf文件也是输出信息时使用的配置文件,格式与元素二所指定的配置文件一样,但 test.properties是默认配置文件,即当.lcf文件找不到时才使用。那么.lcf文件如何命名呢?其实.lcf文件的名称并不是随意起的,当SocketAppender与SocketServer建立连接时,SocketServer就会获得SocketAppender所在计算机的IP 地址与网络ID,并将其格式化成\网络ID/IP地址\这样的字符串,然后获取其中的网络ID作为.lcf文件的主名,例如\,其中的\就是主文件名,而后再根据这个文件名来调用相应的.lcf文件。这意味着对不同的计算机可以提供不同的配置文件,使信息输出时有不同的效果。此外,SocketServer还默认了一个名为generic.lcf的文件,用于处理网络ID获取不到或其他情况,本例是用的就是这个文件,内容如下: log4j.rootLogger=, console

log4j.appender.console =org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%m%n

该配置指定 SocketServer使用ConsoleAppender以PatternLayout格式输出信息。运行程


log4j取代System.out.pringln()(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国冷轧带钢市场调研报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: