今天整个软件新城都停电了,趁机给自己放个假。一觉睡到自然醒,然后起床洗个澡,敷个面膜,靠在床边听听老歌...... 最惬意的生活,莫过于此了。
如果测试在执行过程中,没有相应的日志信息,那么当用例执行出错时,你是不是会为无法快速定位问题而懊恼?那么,今天就来讲讲如何给Selenium Web自动化中添加日志信息。没错,就是采用Log4j日志框架。
Log4j是什么
Log4j是Apche的一个开源项目,是一个强有力的日志操作包。在Selenium Web自动化中,通过使用Log4j,我们控制将日志信息输送到控制台、文件、GUI组件等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最重要的是,所有这些都可以通过一个配置文件来灵活配置,而无需修改应用的代码。
Log4j的三大组件:
Loggers:
Loggers用来处理日志信息。
-
= [ level ] , appenderName1, appenderName2, …
-
=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:可设值如下几种:
:将日志文件输出到控制台,类似于将日志信息按照指定格式用打印到控制台
-
=.
-
-
选项:
-
- Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
-
- ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
-
- Target=:默认值是
2. FileAppender:将日志文件输出到文件
-
=.
-
-
选项:
-
- Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
-
- ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
-
- File=:将记录到的文件名。您可使用 ${some_property_key}(例如, 或 系统属性)指定路径。
-
- Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
3. RollingFileAppender:日志文件大小到达指定尺寸的时候产生一个新的日志文件
息。
-
=.
-
-
选项:
-
- Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
-
- ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
-
- File=:将记录到的文件名。您可使用 ${some_property_key}(例如, 或 系统属性)指定路径。
-
- Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
-
- MaxFileSize=100 KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
-
- MaxBackupIndex=2:保留最多(例如)2 个备份文件。擦除最旧文件。0 表示不保留任何备份文件。
Layouts
Layouts用来配置日志的输出格式。
=className
Log4j提供的layout的className有以下几种:
1. TTCCLayout:包含日志产生的时间、线程、类别等等信息
息。
-
.
-
-
选项:
-
- LocationInfo=true:输出 Java 文件名和行号。缺省设置为 false。
:以HTML表格形式布局
息。
-
.
-
-
选项:
-
- LocationInfo=true:输出 Java 文件名和行号。默认为 false。
-
- Title=My log title: 设置 HTML 的 <title> 标记。缺省设置为“Log4J Log Messages”。
:包含日志信息的级别和信息字符串
.
:可以灵活地指定布局模式。
息。
-
.
-
-
选项:
-
- ConversionPattern=%-5p, [%t]:%m%n:如何格式化每条日志消息
-
-
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
-
- %m 输出代码中指定的消息;
-
- %M 输出打印该条日志的方法名;
-
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
-
- %r 输出自应用启动到输出该log信息耗费的毫秒数;
-
- %c 输出所属的类目,通常就是所在类的全名;
-
- %t 输出产生该日志事件的线程名;
-
- %n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
-
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
-
- %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
-
# Root logger option
-
=INFO, stdout
-
-
# Direct log messages to stdout
-
=.
-
=
-
=.
-
=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
2. 输出log到file
-
# Root logger option
-
=INFO, file
-
-
# Direct log messages to a log file
-
=.
-
-
=./target/logs/myLog.=10MB
-
=10
-
=.
-
=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
3.输出log到Console和file
-
# Root logger option
-
=INFO, file, stdout
-
-
# Direct log messages to a log file
-
=.
-
=./target/logs/myLog.=10MB
-
=10
-
=.
-
=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
-
-
# Direct log messages to stdout
-
=.
-
=
-
=.
-
=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
1.输出log到Console
-
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
-
xmlns:log4j='/log4j/'>
-
-
<appender name="console" class=".">
-
<layout class=".">
-
<param name="ConversionPattern"
-
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
-
</layout>
-
</appender>
-
-
<root>
-
<level value="DEBUG" />
-
<appender-ref ref="console" />
-
</root></log4j:configuration>
2.输出log到file
-
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
-
xmlns:log4j='/log4j/'>
-
-
<appender name="file" class=".">
-
<param name="append" value="false" />
-
<param name="maxFileSize" value="10KB" />
-
<param name="maxBackupIndex" value="5" />
-
<!-- For Tomcat -->
-
<param name="file" value=“./target/log/" />
-
<layout class=".">
-
<param name="ConversionPattern"
-
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
-
</layout>
-
</appender>
-
-
<root>
-
<level value="ERROR" />
-
<appender-ref ref="file” />
-
</root></log4j:configuration>
3.输出log到Console和file
-
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE log4j:configuration SYSTEM ""><log4j:configuration debug="true"
-
xmlns:log4j='/log4j/'>
-
-
<appender name="console" class=".">
-
<layout class=".">
-
<param name="ConversionPattern"
-
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
-
</layout>
-
</appender>
-
-
<appender name="file" class=".">
-
<param name="append" value="false" />
-
<param name="maxFileSize" value="10MB" />
-
<param name="maxBackupIndex" value="10" />
-
<param name="file" value="./target/log/" />
-
<layout class=".">
-
<param name="ConversionPattern"
-
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
-
</layout>
-
</appender>
-
-
<root>
-
<level value="DEBUG" />
-
<appender-ref ref="console" />
-
<appender-ref ref="file" />
-
</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文件中的设置,将日志输出到了控制台。
别浪费时间了,快来关注【七姑娘日记】吧