log4j日志

log4j

前言
生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界,而电脑里的日志可以是有价值的信息宝库,也可以是毫无价值的数据泥潭
这就要看你分析日志的能力,分析好了就能发掘宝贵的财富,发掘不好就一无所有,那怎样发掘好呢
要想对日志数据发掘好就要有其他的学科了----->数据分析师:那么数据分析师怎么分析呢?就要依赖大数据处理技术或者收费的编译语言MATLAB
日志可以用于大数据分析
那么我们今天要讲的日志是什么意思:是Java中程序处理运行时产生的日志数据信息
java日志相关技术 log4j.jar Sl4j.jar commons-logging.jar
断点调试和记录日志是作为Java程序员所必须要具备的技能
后边的一些流行框架技术和互联网技术都有用到日志技术

log4j的特性

  • 线程安全
  • log4j是经过优化速度的
  • log4j是基于一个名为记录器的层次结构
  • log4j的支持每个记录器多输出追加器(appender)
  • log4j支持国际化
  • log4j并不限于一组预定义的设备
  • 日志行为可以使用配置文件在运行时设置
  • log4j设计从一开始就是处理java异常
  • log4j有多个级别 , 通过控制这些级别可以实现将某些不想输出的信息过滤掉
  • 日志输出的格式可以通过拓展Layout类容易的改变
  • 日志输出的目标 , 以及在写入策略可通过实现Appender程序接口改变
  • log4j会故障停止 , 然而 , 尽管它肯定努力确保传递 , log4j不保证每个日志语句将被传递到目的地

log4j的使用

在普通项目中 使用时只需要在src级别下创建一个名字为log4j.properties的配置文件,且设定该文件的编码格式为UTF-8

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
使用
package cn.qsub;

import org.apache.log4j.Logger;

public class First {
private static Logger  logger=Logger.getLogger(First.class);
	public static void main(String[] args) {
		logger.info("普通的info信息");
		logger.debug("调试的debug信息");
		logger.error("报错的error信息");
		logger.warn("警告的warning信息");
	}

}

log4j的主要组成部分

  • loggers : 负责捕获记录信息
  • appenders : 负责发布日志信息 , 以不同的首选目的地
  • layouts : 负责格式化不同风格的日志信息

日志级别

log4j只会输出级别大于或者等于指定级别的信息 ;
虽然有这么多级别,但是在log4j.properties中配置的时候只是需要用到从高到低分别是ERROR , WARN , INFO , DEBUG

等级从小到大划分

  • LL : 各级包括自定义级别
  • TRACE : 指定细粒度比DEBUG更低的信息事件
  • DEBUG : 调试级别
  • INFO : 表明消息在粗粒度级别上突出强调应用程序是非常有帮助的 , 也就是输出一些提示信息
  • WARN : 输出潜在的有可能出错的情形 , 也就是输出警告信息
  • ERROR : 指出发生的不影响系统继续运行的错误信息
  • FATAL : 指出严重的错误 , 这些错误将会导致系统终止运行
  • OFF : 为最高级别 , 用于关闭所有日志信息的输出

配置设置

配置根Logger , 语法为

log4j.rootLogger = [ level ] , appenderName , appenderName ……
注意 : 1 . 第七条中虽然罗列了很多级别 , 但log4j推荐只使用四个级别 , 优先级从高到低分别是ERROR , WARN , INFO , DEBUG ;
2 . appenderName指的是日志输出的地址 , 可以同时指定n个 ;

配置日志输出的目的地Appender以及每个输出文件的各项属性

log4j.appender.appenderName = fully.qualified.name.of.appender.class /类的路径/
log4j.appender.appenderName.option1 = value1 /某些具体的值/

注意 : log4j中提供的appender有以下几种 :
org.apache.log4j.ConsoleAppender(控制台) ;
org.apache.log4j.FileAppender(文件) ;
org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件) ;
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ;
org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置) ;

配置日志信息的格式或者布局layout以及布局的各项属性

log4j.appender.appenderName.layout = fully.qualified.name.of.appender.class
log4j.appender.appenderName.layout.option1 = value

  注意 : log4j中提供的layout有以下几种 :

org.apache.log4j.HTMLLayout(以HTML表格形式布局) ;
org.apache.log4j.PatternLayout(可以灵活的指定布局模式(自己指定输出的日志的格式) , 但是需要配置layout.ConversionPattern属性) ;
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) ;
org.apache.log4j.TTCCLayout(包含日志产生的时间 , 线程 , 类别等等信息) ;

控制台选项

  • log4j.appender.appenderName.Threshold = error

用法 : rootLogger里配置debug , 然后某个文件专门存储error以及更高级别的错误信息 , 那么就在这个配置这个文件的时候指定Threshold属性为error ;

  • log4j.appender.appenderName.ImmediateFlush=true

用法 : 默认值是true , 意味着所有的消息都会被立即输出 , false则是不输出 ;

  • log4j.appender.appenderName.target=System.out

用法 : 默认值为System.out , 输出到控制台 , 还可以取值System.err , 当做错误信息输出 , 输出的信息全部为红色 ;

  • log4j.appender.appenderName.File=…/…/…/…/logs/log.appenderName.txt

用法 : 指定日志输出到指定位置 , 用的是相对于配置文件根目录的相对路径 ;

  • log4j.appender.appenderName.File.Append=true

用法 : 默认值是true , 即将消息追加到指定文件中 , 如果取值为false , 则会覆盖之前的日志内容 ;

  • log4j.appender.appenderName.MaxFileSize=20MB

用法 : 后缀可以是KB , MB , GB , 当日志文件的大小到达指定大小后 , 将会自动滚动 , 即将原来的内容移到fileName.1文件中 , 用记事本打开该文件即可看到原来的内容 , 改属性只能在 appender=org.apache.log4j.RollingFileAppender 时使用 ;

  • log4j.appender.appenderName.MaxBackupIndex=10

用法 : 指定可以产生滚动文件的最大数量 , 与RollingFileAppender和MaxFileSize属性一起使用 , 当MaxBackupIndex=n的时候 , 最大日志存在数量为n+1 , 即log.txt , log.txt.1 , … , log.txt.n , 当在服务器上运行的时候 , 如果对日志数量没有限制 , 那么随之时间的推移 , 日志文件会越来越多 , 占用的内存也将越来越多 , 直到占满整个盘 ;

  • log4j.appender.appenderName.DatePattern=’.'yyyy-MM-dd

法 : 该属性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 时使用 , DailyRollingFileAppender默认的频度是每天产生一个日志记录文件 , 可以在DatePattern属性值中指定其他的频度 , 常用的几个频度如下 :
1 . '.'yyyy-MM : 每月产生一个日志记录文件 ;
2 . '.'yyyy-ww : 每周产生一个日志记录文件 ;
3 . '.'yyyy-MM-dd : 每天产生一个日志记录文件 ;
4 . '.'yyyy-MM-dd-a : 每半天产生一个日志记录文件 ;
5 . '.'yyyy-MM-dd-HH : 每小时产生一个日志记录文件 ;
6 . '.'yyyy-MM-dd-HH-mm : 每分钟产生一个日志记录文件 ;
注意 : 该属性指定值之后 , 将会按照指定的频度来生成日志记录文件 , 假设指定生成一个名为 log.txt 的文件 , 频度指定为每分钟产生一个日志记录文件 , 当达到指定频度后 , 会将log.txt文件中记录的之前的日志记录 , 重新写入一个名为 log.txt.yyyy-MM-dd-HH-mm的文件中 , 而此时 log.txt 文件中存放的是新生成的日志信息 , 该过程循环往复 ;

分级过滤器

果想要实现不同级别的日志分别输出到不同的位置 , 可以在properties配置文件中加入如下语句进行限制,将最低输出级别LevelMin和最高输出级别LevelMax都设置为debug , 那么就只能输出debug级别的日志信息了 ;

log4j.appender.appenderName.Threshold=debug
log4j.appender.appenderName.filter.filterName=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.appenderName.filter.filterName.LevelMin=debug
log4j.appender.appenderName.filter.filterName.LevelMax=debug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值