Selenium之巧用log4j日志框架

时间:2024-10-30 10:35:02

今天整个软件新城都停电了,趁机给自己放个假。一觉睡到自然醒,然后起床洗个澡,敷个面膜,靠在床边听听老歌...... 最惬意的生活,莫过于此了。

如果测试在执行过程中,没有相应的日志信息,那么当用例执行出错时,你是不是会为无法快速定位问题而懊恼?那么,今天就来讲讲如何给Selenium Web自动化中添加日志信息。没错,就是采用Log4j日志框架。

Log4j是什么

Log4j是Apche的一个开源项目,是一个强有力的日志操作包。在Selenium Web自动化中,通过使用Log4j,我们控制将日志信息输送到控制台、文件、GUI组件等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最重要的是,所有这些都可以通过一个配置文件来灵活配置,而无需修改应用的代码。

Log4j的三大组件:

Loggers:

Loggers用来处理日志信息。

  1. = [ level ] , appenderName1, appenderName2, …
  2. =false:表示Logger不会在父Logger的appender里输出,默认为true

Level: 定义一个Log4j级别,控制到应用程序中相应级别的日志信息的开关。Log4j包含7种级别:

- All: 输出所有Log

- DEBUG:输出debug log,常用于开发阶段 

- INFO:输出information log,主要是为了标记执行过程。

- WARN:输出错误的或者意想不到的系统信息

- ERROR:输出影响系统正常进行的错误信息

- FATAL:输出导致系统崩溃的致命信息

- OFF:不输出log

比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。例如:=INFO,A1,B2,C3

Appenders

Appenders负责配置日志信息输出目的地。

 = className

appenderName:自定义appderName,在设置中使用;className:可设值如下几种:

:将日志文件输出到控制台,类似于将日志信息按照指定格式用打印到控制台

  1. =.
  2. 选项:
  3. - Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  4. - ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true
  5. - Target=:默认值是

2. FileAppender:将日志文件输出到文件

  1. =.
  2. 选项:
  3. - Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  4. - ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true
  5. - File=:将记录到的文件名。您可使用 ${some_property_key}(例如, 或 系统属性)指定路径。
  6. - Append=falsetrue表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true

3. RollingFileAppender:日志文件大小到达指定尺寸的时候产生一个新的日志文件

息。

  1. =.
  2. 选项:
  3. - Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
  4. - ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true
  5. - File=:将记录到的文件名。您可使用 ${some_property_key}(例如, 或 系统属性)指定路径。
  6. - Append=falsetrue表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true
  7. - MaxFileSize=100 KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
  8. - MaxBackupIndex=2:保留最多(例如)2 个备份文件。擦除最旧文件。0 表示不保留任何备份文件。

Layouts

Layouts用来配置日志的输出格式。

=className

Log4j提供的layout的className有以下几种:

1. TTCCLayout:包含日志产生的时间、线程、类别等等信息

息。

  1. .
  2. 选项:
  3. - LocationInfo=true:输出 Java 文件名和行号。缺省设置为 false

:以HTML表格形式布局

息。

  1. .
  2. 选项:
  3. - LocationInfo=true:输出 Java 文件名和行号。默认为 false
  4. - Title=My log title: 设置 HTML 的 <title> 标记。缺省设置为“Log4J Log Messages”。

:包含日志信息的级别和信息字符串

.

:可以灵活地指定布局模式。

息。

  1. .
  2. 选项:
  3. - ConversionPattern=%-5p, [%t]:%m%n:如何格式化每条日志消息
  4. Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
  5. - %m 输出代码中指定的消息;
  6. - %M 输出打印该条日志的方法名;
  7. - %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
  8. - %r 输出自应用启动到输出该log信息耗费的毫秒数;
  9. - %c 输出所属的类目,通常就是所在类的全名;
  10. - %t 输出产生该日志事件的线程名;
  11. - %n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
  12. - %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921
  13. - %l 输出日志事件的发生位置,及在代码中的行数。

如何在测试框架中配置Log4j

Step 1引入Log4j jar包

我是用的是Selenium+Java+Maven的框架,因此,将Log4j作为Maven的外部依赖引入Project。你也可以直接下载Jar包,并添加致外部依赖。


Step 2设定log4j配置文件

将配置文件放在Project的根目录下。配置文件的作用就是对Logger、Appender及Layout进行相应设定。

Log4j支持两种配置文件格式:

- XML格式的文件

- properties属性文件

Log4J配置文件的基本格式如下:

- 配置根Logger

- 配置日志信息输出目的地Appender

- 配置日志信息格式

下面详细列举和


1.输出log到Console

  1. # Root logger option
  2. =INFO, stdout
  3. # Direct log messages to stdout
  4. =.
  5. =
  6. =.
  7. =%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

2. 输出log到file

  1. # Root logger option
  2. =INFO, file
  3. # Direct log messages to a log file
  4. =.
  5. =./target/logs/myLog.=10MB
  6. =10
  7. =.
  8. =%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

3.输出log到Console和file

  1. # Root logger option
  2. =INFO, file, stdout
  3. # Direct log messages to a log file
  4. =.
  5. =./target/logs/myLog.=10MB
  6. =10
  7. =.
  8. =%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
  9. # Direct log messages to stdout
  10. =.
  11. =
  12. =.
  13. =%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


1.输出log到Console

  1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
  2.        xmlns:log4j='/log4j/'>
  3.        <appender name="console" class=".">
  4.            <layout class=".">
  5.                <param name="ConversionPattern"
  6.                  value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
  7.            </layout>
  8.        </appender>
  9.        <root>
  10.                <level value="DEBUG" />
  11.                <appender-ref ref="console" />
  12.        </root></log4j:configuration>

2.输出log到file

  1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
  2.        xmlns:log4j='/log4j/'>
  3.        <appender name="file" class=".">
  4.           <param name="append" value="false" />
  5.           <param name="maxFileSize" value="10KB" />
  6.           <param name="maxBackupIndex" value="5" />
  7.           <!-- For Tomcat -->
  8.           <param name="file" value=“./target/log/" />
  9.           <layout class=".">
  10.                <param name="ConversionPattern"
  11.                        value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
  12.           </layout>
  13.        </appender>
  14.        <root>
  15.                <level value="ERROR" />
  16.                <appender-ref ref="file” />
  17.        </root></log4j:configuration>

3.输出log到Console和file

  1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
  2.  xmlns:log4j='/log4j/'>
  3.        <appender name="console" class=".">
  4.            <layout class=".">
  5.                <param name="ConversionPattern"
  6.                        value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
  7.            </layout>
  8.        </appender>
  9.        <appender name="file" class=".">
  10.            <param name="append" value="false" />
  11.            <param name="maxFileSize" value="10MB" />
  12.            <param name="maxBackupIndex" value="10" />
  13.            <param name="file" value="./target/log/" />
  14.            <layout class=".">
  15.                <param name="ConversionPattern"
  16.                        value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
  17.            </layout>
  18.        </appender>
  19.        <root>
  20.                <level value="DEBUG" />
  21.                <appender-ref ref="console" />
  22.                <appender-ref ref="file" />
  23.        </root></log4j:configuration>

如何在代码中记录Log

Step 1:定义一个Logger类的实例

public static Logger logger = Logger.getLogger("console”);

注意:Logger类提供了两种静态方法来获取log对象。

  • Public static Logger getRootLogger()

  • Public static Logger getLogger(String name)

Step 2:记录Log

例如,我们在成功打开浏览器之后,记录Log。

logger.info("This is info message: Open broswer successfully");

最后,验证看看。按照我们在Properties文件中的设置,将日志输出到了控制台。



 

别浪费时间了,快来关注【七姑娘日记】吧