JAVA接口自动化(十一)log4j

一、log4j介绍

1 . 为什么要使用日志

答 : 开发阶段发现程序的问题 , 排除错误 , 产品阶段 , 可以记录系统运行的一些状态信息 , 程序运行的状态 ;

2 . System . out . println的局限性

答 : (1)不能在运行时打开或者关闭 ;

       (2)不能选择包或者类 , 在运行的时候打开或者关闭 ;

       (3)输出的信息没有分级 ;

       (4)只能输出文本信息 ;

       (5)不能改变输出位置 ;

3 . 什么是log4j ?

答 : log4j是目前最流行的java开源日志处理框架 , 是Apache的子项目 ;

4 . 关于配置文件

答 : log4j中的xml配置文件要优先于properties文件 ;

5 . log4j的特性

答 : (1)线程安全 ;

       (2)log4j是经过优化速度的 ;

       (3)log4j是基于一个名为记录器的层次结构 ;

       (4)log4j的支持每个记录器多输出追加器(appender) ;

       (5) log4j支持国际化 ;

       (6)log4j并不限于一组预定义的设备 ;

      (7)日志行为可以使用配置文件在运行时设置 ;

      (8)log4j设计从一开始就是处理java异常 ;

      (9)log4j有多个级别 , 通过控制这些级别可以实现将某些不想输出的信息过滤掉 ;

     (10) 日志输出的格式可以通过拓展Layout类容易的改变 ;

     (11)日志输出的目标 , 以及在写入策略可通过实现Appender程序接口改变 ;

     (12) log4j会故障停止 , 然而 , 尽管它肯定努力确保传递 , log4j不保证每个日志语句将被传递到目的地 ;


6 . log4j的主要组成部分

答 : (1)loggers : 负责捕获记录信息 ;

       (2)appenders : 负责发布日志信息 , 以不同的首选目的地 ;

       (3)layouts : 负责格式化不同风格的日志信息 ;


7 . log4j级别(从小到大)

答 : ALL : 各级包括自定义级别 ;

  TRACE : 指定细粒度比DEBUG更低的信息事件 ;

  DEBUG : 调试级别 ;

  INFO : 表明消息在粗粒度级别上突出强调应用程序是非常有帮助的 , 也就是输出一些提示信息 ;

  WARN : 输出潜在的有可能出错的情形 , 也就是输出警告信息 ;

  ERROR : 指出发生的不影响系统继续运行的错误信息 ;

  FATAL : 指出严重的错误 , 这些错误将会导致系统终止运行 ;

  OFF : 为最高级别 , 用于关闭所有日志信息的输出 ;

核心规则 : log4j只会输出级别大于或者等于指定级别的信息 ;

8 . properties文件配置

答 : 1 . 配置根Logger , 语法为 :

      log4j.rootLogger = [ level ] , appenderName , appenderName ……

  注意 : (1)第七条中虽然罗列了很多级别 , 但log4j推荐只使用四个级别 , 优先级从高到低分别是ERROR , WARN , INFO , DEBUG ;

            (2)appenderName指的是日志输出的地址 , 可以同时指定n个 ;

  2 . 配置日志输出的目的地Appender以及每个输出文件的各项属性 , 语法为 :

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

        log4j.appender.appenderName.option1 = value1

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

            1 . org.apache.log4j.ConsoleAppender(控制台) ;

            2 . org.apache.log4j.FileAppender(文件) ;

            3 . org.apache.log4j.DailyRollingFileAppender(按照一定的频度滚动产生日志记录文件 , 默认每天产生一个文件) ;

            4 . org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) ;

            5 . org.apache.log4j.WriterAppender(将日志信息以流格式发送到指定的位置) ;

  3 . 配置日志信息的格式或者布局layout以及布局的各项属性 , 语法为 :

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

        log4j.appender.appenderName.layout.option1 = value

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

          1 . org.apache.log4j.HTMLLayout(以HTML表格形式布局) ;

          2 . org.apache.log4j.PatternLayout(可以灵活的指定布局模式 , 需要配置layout.ConversionPattern属性) ;

          3 . org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) ;

          4 . org.apache.log4j.TTCCLayout(包含日志产生的时间 , 线程 , 类别等等信息) ;


9 . 控制台选项

答 : 1 . log4j.appender.appenderName.Threshold = error

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

  2 . log4j.appender.appenderName.ImmediateFlush=true

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

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

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

  4 . log4j.appender.appenderName.File=../../../../logs/log.appenderName.txt

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

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

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

  6 . log4j.appender.appenderName.MaxFileSize=20MB

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

  7 . log4j.appender.appenderName.MaxBackupIndex=10

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

  8 . 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 文件中存放的是新生成的日志信息 , 该过程循环往复 ;

10 . ConversionPattern参数

答 : 假设当前java文件名为Test , 所在包名为log4j :

  1 . %c : 显示当前logger空间全称 , 例如 : log4j.Test ;

        %c{层数} : 最内层的java文件为第一层 , 例如 : %c{1} , 显示为Test , 当层数大于实际存在的最大层数时 , 显示最大实际存在层数 ;

  2 . %10c : 若名字空间长度小于10 , 则在左边将欠缺的长度用空格补齐 , 该种情况为默认的右对齐方式 ;

        %-10c : 若名字空间长度小于10 , 则在右边将欠缺的长度用空格补齐 , 该种情况为默认的左对齐方式 ;

  3 . %.3c : 从空间名最右边开始显示指定的长度 , 超出该长度的部分将被截取 ;

  4 . %10.15c : 若空间名长度小于10 , 则左边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取 ;

  7 . %-10.15c : 若空间名长度小于10 , 则右边将欠缺的长度用空格补齐 , 若长度超过15 , 则将多余部分截取 ;

  8 . %d : 显示日志记录时间 , 默认时间格式为ISO8601定义的日期格式 ;

        %d{yyyy-MM-dd HH:mm:ss} : 按照指定的时间格式显示日期 ;

  9 . %d{ABSOLUTE} : 22:15:30,076 ;

        %d{DATE} : 12 Oct 2018 22:15:30,076 ;

        %d{ISO8601} : 2018-07-20 22:23:30,076 ;

  10 . %F : 显示调用logger的源文件名 , 例如 : Test.java ;

  11 . %l : 输出日志事件的发生位置 , 包括类目名 , 发生的线程 , 以及在代码中的行数 , 例如 : log4j.log4jTest.main(log4jTest.java:40) ;

  12 : %m : 显示输出消息 ;

  13 . %M : 显示调用logger的方法名 ;

  14 . %n : 换行符 ;

  15 : %p : 显示该条目的优先级 ;

  16 . %r : 显示从程序启动时到记录该条日志时已经经过的时间 , 单位毫秒 ;

  17 . %t : 显示产生该日志条目的线程名 ;

  18 . %x : 按NDC(Nested Diagnostic Context , 线程堆栈) : 顺序输出日志 ;

          %X : 按MDC(Mapped Diagnostic Context , 线程映射表)输出日志 , 通常用于多个客户端连接同一个服务器 , 方便服务器区分是哪个客户端访问留下来的日志 ;

  19 . %% : 显示一个百分号 ;

11 . LevelRangeFilter(分级过滤器)

答 : 如果想要实现不同级别的日志分别输出到不同的位置 , 可以在properties配置文件中加入如下语句进行限制 , 例如 :

  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

  解释 : 将最低输出级别LevelMin和最高输出级别LevelMax都设置为debug , 那么就只能输出debug级别的日志信息了 ;

(2)log4j使用

将log4j-1.2.17.jar进行buildpath,原来使用过maven配置依赖,但是在使用时候报错所以就直接导入jar包。

log4j.properties文件

#设置log4j日志输出路径

log = D:/logs

#设置输出日志级别和输入模式

log4j.rootLogger=debug,appender1,FILE

#设置控制台输出信息

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

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

log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n

#设置日志输出路径

log4j.appender.FILE=org.apache.log4j.RollingFileAppender

log4j.appender.FILE.MaxFileSize=10MB

log4j.appender.FILE.MaxBackupIndex=3

log4j.appender.FILE.File=${log}/testLog.log

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

log4j.appender.FILE.layout.conversionPattern=%m%n

测试demo 类:

package com.suning.SuningInterfaceAutotest.log4j;

import org.apache.log4j.Logger;

public class demo {

private static Logger logger = Logger.getLogger(demo.class);

public static void main(String[] args) {

logger.debug("This is debug message.");

logger.info("This is info message.");

logger.error("This is error message.");

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,985评论 0 6
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,044评论 1 13
  • 一、Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layo...
    默默守护阅读 1,908评论 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,290评论 0 0
  • 爱珠宝,不仅仅是爱它的美丽,爱它的价值,更是爱它背后那份独一无二的文化与尊贵!爱珠宝的女人都爱自己,因为爱自己,才...
    岳笑峥vip阅读 235评论 0 0