OK,现在我们来研究输出低Appended。

Appender控制日志输出的位置

Log4j日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)、根据天数或者文件大小产生新的文件、以流的形式发送到其它地方等等。

Log4j内置了常用的输出地,一般情况下配置一下即可使用,所有的Appender都实现了自org.apache.log4j.Appender接口。在log4j.properties中,Appended都使用log4j.appender.*配置。

常用的输出位置有如下几个:

ConsoleAppender(控制台)

FileAppender(文件)

RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

DailyRollingFileAppender(每天产生一个日志文件)

JDBCAppender(输出到JDBC数据库)

SocketAppender(远程日至服务器)

WriterAppender(将日志信息以流格式发送到任意指定的地方)

SMTPAppender(发送邮件)

配置时使用方式为:

log4j.appender.appenderName=fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1=value1

…log4j.appender.appenderName.optionN=valueN

也可以自己实现Appender接口, 这样就为日志的输出提供了相当大的便利。

这里我们来举几个例子,熟悉下常用的日志输出。

1,输出到控制台

控制台是最常用的输出地,前面的一系列博客我们用的例子都是在控制台输出。控制台输出实现类为org.apache.log4j.ConsoleAppender。

下面是一份比较完整的log4j.properties配置文件:

og4j.rootLogger=DEBUG,console

# 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕

#输出到控制台

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

#设置输出样式

log4j.appender.console.layout=org.apache.log4j.PatternLayout

#日志输出信息格式为

log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#DEBUG以上级别输出,Threshold,入口,临界值

#log4j.appender.console.Threshold=DEBUG

#日志编码方式

#log4j.appender.console.Encoding=UTF-8

#是否立即输出

#log4j.appender.console.ImmediateFlush=true

#使用System.error作为输出

#log4j.appender.console.Target=System.error关于上面这份配置文件,有3点解释:

1,我们在实际的配置文件中,"#"注释必须另起一行

2,控制台输出需要配置layput属性,最常用的就是正则表达式格式。还有一些可选的属性,一般实际中不会怎么用到,Encoding设置编码方式,ImmediateFlush设置是否缓存,Target设置输出到System.out还是System.err。

3,Threshold用来设置该Appender的级别,只对本Appender生效。所有的Appender都可通过设置Threshold来设置本Appender的启用级别。

2,输出到文件

文件输出FileAppender把日志输出到指定的文件中,文件输出的实现类为org.apache.log4j.FileAppender,配置时候需要用File指定文件名称。当然,这个路径可以使用相对路径,也可以使用绝对路径。

下面一份文件输出的log4j.properties的配置文件:

log4j.category.org.linkinpark.commons.logtest1=ERROR,file

log4j.rootLogger=DEBUG,console

# 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕

#输出到控制台

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

#设置输出样式

log4j.appender.console.layout=org.apache.log4j.PatternLayout

#日志输出信息格式为

log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#DEBUG以上级别输出,Threshold,入口,临界值

#log4j.appender.console.Threshold=DEBUG

#日志编码方式

#log4j.appender.console.Encoding=UTF-8

#是否立即输出

#log4j.appender.console.ImmediateFlush=true

#使用System.error作为输出

#log4j.appender.console.Target=System.error

#输出到文件(这里默认为追加方式)

log4j.appender.file=org.apache.log4j.FileAppender

#输出文件位置

log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log

log4j.appender.file.Append=true

#样式为TTCCLayout

#log4j.appender.file.layout=org.apache.log4j.TTCCLayout

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n关于上面的配置文件我这里解释一下:

1,可选参数Append配置是否在源文件内容的基础上追加日志。如果是false,Logger初始化会先情清掉文件内容,也就是说每次重启程序,原来的日志就会丢失。如果为true,日志文件就会越来越大。默认为true。

2,我们上面用category属性来重新定义我们的自己的logtest1包下面的日志输出,然后指定日志输出到/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log文件中。

现在我们来检查下控制台输出没有问题,category继承了默认的rootLogger在控制台输出了,而且还在我们上面指定的路径下的日志文件中追加进去了日志内容。

➜ WorkSpace cd linkin-log-test

➜ linkin-log-test ls

pom.xml src target

➜ linkin-log-test pwd

/Users/LinkinPark/WorkSpace/linkin-log-test

➜ linkin-log-test ls

log pom.xml src target

➜ linkin-log-test cd log

➜ log ls

log4j.log

➜ log more log4j.log

[2016-02-23 09:52:48]-[main-ERROR]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(30)]: error级别的日志输出

[2016-02-23 09:52:48]-[main-FATAL]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(31)]: fatal级别的日志输出

[2016-02-23 09:52:48]-[main-ERROR]-[org.linkinpark.commons.logtest1.Log4jTest1-logTest(38)]: 人工抛出一个异常

3,输出到按大小滚动文件

按大小滚动文件输出RollingFileAppender把日志输出到指定的文件,文件达到指定的大小时,就会自动更名。按尺寸滚动文件输出类为org.apache.log4j.RollingFileAppender,需配置文件名称,文件的最大尺寸。

下面是一份配置文件:

log4j.category.org.linkinpark.commons.logtest1=ERROR,file,rolling_file

log4j.rootLogger=DEBUG,console

# 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕

#输出到控制台

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

#设置输出样式

log4j.appender.console.layout=org.apache.log4j.PatternLayout

#日志输出信息格式为

log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#DEBUG以上级别输出,Threshold,入口,临界值

#log4j.appender.console.Threshold=DEBUG

#日志编码方式

#log4j.appender.console.Encoding=UTF-8

#是否立即输出

#log4j.appender.console.ImmediateFlush=true

#使用System.error作为输出

#log4j.appender.console.Target=System.error

#输出到文件(这里默认为追加方式)

log4j.appender.file=org.apache.log4j.FileAppender

#输出文件位置

log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log

#是否在原日志基础上追加输出日志。true,默认,追加。false,清掉原来日志重新添加

log4j.appender.file.Append=true

#样式为TTCCLayout

#log4j.appender.file.layout=org.apache.log4j.TTCCLayout

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#按大小滚动文件(这里默认为追加方式)

log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender

#输出文件位置

log4j.appender.rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log

log4j.appender.rolling_file.Append=true

#文件达到最大值自动更名

log4j.appender.rolling_file.MaxFileSize=1KB

#最多备份100个文件

log4j.appender.rolling_file.MaxBackupIndex=100

log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout

log4j.appender.rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n关于上面的配置文件解释如下:

1,配置的滚动文件名为rolling_log4j,该文件在/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log路径中,我们设置了文件最大为1K。当rolling_log4j.log达到1K时,就会自动更名为rolling_log4j.log.1,rolling_log4j.log.2,rolling_log4j.log.3....直到rolling_log4j.log.100。

2,Logger支持多个Appender,用逗号将多个Appender名字隔开即可。

多次运行我们自己写的测试类,会发现rolling_log4j.log文件在滚动。下面我贴出具体的文件日志输出:

➜ linkin-log-test cd log

➜ log ls -l

total 16

-rw-r--r-- 1 LinkinPark staff 1110 2 23 10:17 log4j.log

-rw-r--r-- 1 LinkinPark staff 364 2 23 10:17 rolling_log4j.log

➜ log ls -l

total 16

-rw-r--r-- 1 LinkinPark staff 1850 2 23 10:18 log4j.log

-rw-r--r-- 1 LinkinPark staff 0 2 23 10:18 rolling_log4j.log

-rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1

➜ log ls -l

total 24

-rw-r--r-- 1 LinkinPark staff 2220 2 23 10:18 log4j.log

-rw-r--r-- 1 LinkinPark staff 364 2 23 10:18 rolling_log4j.log

-rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1

➜ log ls -l

total 24

-rw-r--r-- 1 LinkinPark staff 2590 2 23 10:19 log4j.log

-rw-r--r-- 1 LinkinPark staff 728 2 23 10:19 rolling_log4j.log

-rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.1

➜ log ls -l

total 24

-rw-r--r-- 1 LinkinPark staff 2960 2 23 10:19 log4j.log

-rw-r--r-- 1 LinkinPark staff 0 2 23 10:19 rolling_log4j.log

-rw-r--r-- 1 LinkinPark staff 1092 2 23 10:19 rolling_log4j.log.1

-rw-r--r-- 1 LinkinPark staff 1092 2 23 10:18 rolling_log4j.log.2

4,输出到按日志滚动文件

按日期滚动文件输出DailyRollingFileAppender将日志输出到指定的文件,当日期发生变化时,会将文件按照指定的日期格式自动改名。日期滚动文件输出类为org.apache.log4j.DailyRollingFileAppender。

配置文件如下:

log4j.category.org.linkinpark.commons.logtest1=ERROR,file,rolling_file,daily_rolling_file

log4j.rootLogger=DEBUG,console

# 以下是rootLogger的配置,子类默认继承,但是子类重写下面配置=rootLogger+自己配置,我晕

#输出到控制台

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

#设置输出样式

log4j.appender.console.layout=org.apache.log4j.PatternLayout

#日志输出信息格式为

log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#DEBUG以上级别输出,Threshold,入口,临界值

#log4j.appender.console.Threshold=DEBUG

#日志编码方式

#log4j.appender.console.Encoding=UTF-8

#是否立即输出

#log4j.appender.console.ImmediateFlush=true

#使用System.error作为输出

#log4j.appender.console.Target=System.error

#输出到文件(这里默认为追加方式)

log4j.appender.file=org.apache.log4j.FileAppender

#输出文件位置

log4j.appender.file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/log4j.log

#是否在原日志基础上追加输出日志。true,默认,追加。false,清掉原来日志重新添加

log4j.appender.file.Append=true

#样式为TTCCLayout

#log4j.appender.file.layout=org.apache.log4j.TTCCLayout

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#按大小滚动文件(这里默认为追加方式)

log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender

#输出文件位置

log4j.appender.rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/rolling_log4j.log

log4j.appender.rolling_file.Append=true

#文件达到最大值自动更名

log4j.appender.rolling_file.MaxFileSize=1KB

#最多备份100个文件

log4j.appender.rolling_file.MaxBackupIndex=100

log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout

log4j.appender.rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#按日期滚动文件

log4j.appender.daily_rolling_file=org.apache.log4j.DailyRollingFileAppender

#输出文件位置

log4j.appender.daily_rolling_file.File=/Users/LinkinPark/WorkSpace/linkin-log-test/log/daily_rolling_log4j.log

#文件滚动日期格式

log4j.appender.daily_rolling_file.DatePattern=.yyyy-MM-dd

log4j.appender.daily_rolling_file.layout=org.apache.log4j.PatternLayout

log4j.appender.daily_rolling_file.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n关于上面的配置文件解释如下:

1,上面的配置中,我们新添加DailyRollingFileAppender类型的Appender。我们的日志文件名称为daily_rolling_file,日期格式为yyyy-MM-dd。进入到新的一天后,文件就会被自动更名,格式为daily_rolling_file.2008-08-08。

每天:’.’YYYY-MM-dd(默认)

2.每星期:’.’YYYY-ww

3.每月:’.’YYYY-MM

4.每隔半天:’.’YYYY-MM-dd-a

5.每小时:’.’YYYY-MM-dd-HH

6.每分钟:’.’YYYY-MM-dd-HH-mm

2,这种配置也是可能我们在实际编码中最常用到的,项目发布到服务器上然后每天生成一个日志文件。

OK,上面我整理了最常用的几种Appender,他们就是ConsoleAppender(控制台),FileAppender(文件),RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),DailyRollingFileAppender(每天产生一个日志文件)。剩下的几种我们一般不会用到,这里也就不做赘述了。现在我们来整理下这4种Appender的关系。

上面的4种Appender都实现了Appender接口,然后ConsoleAppender和FileAppender同级别,FileAppender之下衍生出了2个子类RollingFileAppender,DailyRollingFileAppender。关于这些我会在后面的源码系列中仔细的整理到的。

appender log4j 扩展_Log4j扩展使用--输出地Appender相关推荐

  1. ai进入轮廓模式怎么退出_详解AI中扩展、扩展外观、轮廓化描边、创建轮廓

    详解AI中扩展.扩展外观.轮廓化描边.创建轮廓 在学习AI软件中,有不少同学分不清扩展.扩展外观.轮廓化描边.创建轮廓这四个概念具体的功能区别,今天我们具体聊一下. 先说"扩展", ...

  2. 字扩展,位扩展,和字位扩展_6个有用的LibreOffice扩展

    字扩展,位扩展,和字位扩展 LibreOffice是周围最好的免费办公套件,因此,所有主要的Linux发行版都采用了LibreOffice. 尽管LibreOffice已经包含了功能,但是可以使用称为 ...

  3. 横向扩展 纵向扩展 数据库_扩展数据库–减少扩展的艺术

    横向扩展 纵向扩展 数据库 Let's continue the hybrid saga! After two articles talking about the Azure Blob Storag ...

  4. 横向扩展 纵向扩展 数据库_理解数据库扩展模式的指南

    横向扩展 纵向扩展 数据库 There are lot of articles online describing database scalability patterns, but they ar ...

  5. 九、数组的扩展(扩展运算符)

    文章目录 1. 扩展运算符 1.1 含义 1.2 替代函数的 ES5: apply() 方法 1.3 扩展运算符的应用 1.3.1 复制数组 1.3.2 合并数组 1.3.3 与解构赋值结合,会生成 ...

  6. 字扩展,位扩展,和字位扩展_价格合理,可扩展的网站简介

    字扩展,位扩展,和字位扩展 One morning you wake up, grab some coffee, and check the how many people visited your ...

  7. ES6 数组的扩展:扩展运算符

    文章目录 扩展运算符 应用 扩展运算符 扩展运算符(-)作用是将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]); // 1 2 3console.log(1, ...

  8. 扩展桌面:扩展屏幕没有连接,但程序还在扩展屏幕上,在看不到这个屏幕的情况下,怎么把程序窗口拉回来

    扩展桌面:扩展屏幕没有连接,但程序还在扩展屏幕上,在看不到这个屏幕的情况下,怎么把程序窗口拉回来 打开这个程序后,点击这个程序,然后按住Alt + 空格键,选择最大化,即可将程序窗口在本窗口最大化显示 ...

  9. appender log4j 扩展_java-如何在log4j2中创建自定义Appender?

    在log4j2中,其工作原理与在log4j-1.2中完全不同. 在log4j2中,您将为此创建一个插件. 该手册在此处提供了自定义附加程序示例的说明:[http://logging.apache.or ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第10章
  2. 中科院自动化所招AI算法实习生!
  3. 找条朋友圈手都刷断了,原来是没有掌握正确的使用姿势...
  4. 为什么Nginx的性能要比Apache高得多?
  5. Two-Stream RNN/CNN for Action Recognition in 3D Videos-阅读笔记
  6. 2699元!魅族16s Pro现货售罄:将加紧备货
  7. Linux用户管理命令详解,useradd、passwd
  8. AWS免费云服务套餐申请步骤及常见问题
  9. TTL转USB TTL 232 CH340
  10. VUE根据后端返回url链接下载文件
  11. 东芝固态硬盘工具for linux,用东芝笔记本Portege R100下安装Linux的进来参考这篇文章...
  12. matlab函数表达式里分号_matlab中分号、冒号、逗号等常用标点符号的功能和用法总结...
  13. docker 中文文档
  14. 前端-css美化网页元素(一)字体样式,文本样式
  15. pwnable.kr-passcode WP
  16. IEDA免费在线激活永久使用
  17. ArcGIS 图像合并至新栅格图层(Mosaic To New Raster和Mosaic)
  18. android横向卡片式布局,创建卡片式布局  |  Android 开发者  |  Android Developers
  19. vcruntime140_1.dll 丢失的解决办法
  20. 蓝牙键盘连接——输入pin码

热门文章

  1. 在asp.net 2.0中使用SqlBulkCopy类迁移数据[转]
  2. 【操作系统复习】操作系统的概念、功能和目标
  3. MFC随机博弈黑白棋
  4. k-Means——经典聚类算法实验(Matlab实现)
  5. java接收uniapp上传的图片_uni-app 上传图片的坑
  6. oracle未找到时区,解决ORA-01882:未找到时区区域%s
  7. hashcode是什么意思_什么才是 Java 的基础知识?
  8. html代码type,HTML中type是什么意思
  9. 判断三个数是否能构成三角形_三角形的面积
  10. tf.sequence_mask