Log4j2打印执行日志!代码逐句详解

  • Post author:
  • Post category:其他




11使用Log4j2打印执行日志

Log4j2是日志操作包

三个重要组件:日志的优先级、日志信息的输出目的地、日志信息的输出格式。



1.Log4j2功能

1.可以指定日志信息输出的目的地

2.控制每一条日志的输出格式

3.定义日志信息的级别

PS:这些功能通过一个配置文件灵活进行配置。

###2.demo1 Logger的简化使用,这种只输出到控制台!

//demo1 
//用面向对象的思想思考问题!!!

public class Demo1 {
    
    //1.获取日志记录器
	private static final Logger LOGGER=LogManager.getLogger();
    
	String msg="hello";
	@Test
	public void test1() {
		LOGGER.trace("trace:"+msg);
        
        //记录debug级别的信息,般用于细粒度级别上,对调试应用程序非常有帮助。
		LOGGER.debug("debug:"+msg);
        
		//记录info级别的信息,info 一般和在粗粒度级别上,强调应用程序的运行全程。
		LOGGER.info("info:"+msg);
        
        //warn 表明会出现潜在的错误情形。
		LOGGER.warn("warn:"+msg);
        
        //记录error级别的信息,error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
		LOGGER.error("11:"+msg);
        
        //指出每个严重的错误事件将会导致应用程序的退出。
		LOGGER.fatal("fatal:"+msg);	
	}
}
//Log4j比如你不想只在控制台查看测试信息,以前可以用InputStream输出到文件中,但是这个Log4J帮实现了,现在直接就实例化就行
//Log4j  就是日志的操作包。

//log4j.properties是第一代版本的,现在不推荐用。

###3.题外话 基于properties配置文件的BaseTest 知识点:Properties 类

//BaseTest
//可以判断是火狐浏览器还是谷歌的
//并且把打开浏览器的类型保存到日志中
public class BaseTest {
	public WebDriver driver;
    
	@BeforeClass
	public void initBrowser() throws IOException {
        
        //ReadProperties是自己创建的类,详解在下面。
        
        //通过ReadProperties的getValue的方法获得browser的值。
        
		String browser_type=ReadProperties.getValue("browser");
        
        //判断配置文件的browser是不是火狐。
        //这里是为了便于修改,在配置文件中就可以实现火狐或者谷歌浏览器的转换。
        
		if(browser_type.equalsIgnoreCase("firefox")) {
            
            //gecko_driver=d:\\demo\\geckodriver.exe
            
			System.setProperty("webdriver.gecko.driver",ReadProperties.getValue("gecko_driver"));
            
            //firefox=C:\\Program Files\\Mozilla Firefox\\firefox.exe
			System.setProperty("webdriver.firefox.bin",ReadProperties.getValue("firefox"));
            
			driver=new FirefoxDriver();
            
			Log.info("打开ff浏览器");
            
		}else if(browser_type.equalsIgnoreCase("chrome")) {
            //equalsIgnoreCase与equals的区别:前者不考虑大小写。
			System.setProperty("webdriver.chrome.driver",
                                                      ReadProperties.getValue("chrome_driver"));
            
		   
			driver=new ChromeDriver();
            
			Log.info("打开chrome浏览器");
            
		}

	
			
	}
	//在这个Test方法中实现了对报错日志的记录。
	@Test
	public void testMymovie() {
		try {
            //通过ReadProperties这个类的getValue获取键值对左侧名为base_url方法
			driver.get(ReadProperties.getValue("base_url"));
            
            
			driver.findElement(By.name("username")).sendKeys("admin");
		} catch (Exception e) {	
            //如果报错,输出error级别的报错信息。
            
            //Log类的error方法。
			Log.error(e.getMessage());
		}
	
	}

}



4.Properties 类

Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类 ,它使用

键值结构

存储数据, 属性列表中每个键及其对应值都是一个

字符串

这个类的常用方法

load:从字节输入流中读取

键值对

。利用InputStream对象,实现对文件的链接,


什么是键值对?

例如:filename = 666.txt。

//常用方法   小部分源代码
public void load(InputStream inStream);
public class ReadProperties {
    
    //这个是与src并列的就是在项目文件下设置的文件夹conf,conf/config.properties就是该文件。
	public static final String filePath="conf/config.properties";
    
	public static String getValue(String key) throws IOException {
        
        //是Java 语言的配置文件所使用的类 
		Properties prop=new Properties();
        
        //把config.properties引入进来。这里用InputStream是因为load方法是从InputStream对象中读取信息。
		FileInputStream fis=new FileInputStream(filePath);
        //实现了文件的引入
		prop.load(fis);
        //关闭文件输入流
		fis.close();
        
		//java.util.Properties.getProperty(String key,String defaultValue) 
        //getProperty方法。
        //在属性列表中指定键的属性的方法搜索
		return prop.getProperty(key);
	}

}

conf/config.properties 根据自己的文件路径输入

browser=chrome
gecko_driver=d:\\demo\\geckodriver.exe
chrome_driver=d:\\demo\\chromedriver.exe

firefox=C:\\Program Files\\Mozilla Firefox\\firefox.exe
base_url=http://localhost:8032/mymovie/
screen=d:\\demo\\screen



5.Log类里的Logger 测试开发的好习惯

注意控制台输出的字体是红色的

//log的好处???
//我认为可以在日志文件中添加信息。
//直接调用Log


public class Log {
	
	private static final Logger LOGGER=LogManager.getLogger();
	public static void trace(String msg) {
		LOGGER.trace(msg);
	}
	
	public static void debug(String msg) {
		LOGGER.debug(msg);
	}
	
	public static void info(String msg) {
		LOGGER.info(msg);
	}
	
	public static void warn(String msg) {
		LOGGER.warn(msg);
	}
	
	public static void error(String msg) {
		LOGGER.error(msg);
	}
	
	public static void fatal(String msg) {
		LOGGER.fatal(msg);
	}

	
}

xml文件放在src下面就可以了;



6.log4j.xml 详解

您也可以不使用配置文件,但是配置文件更加灵活

可以输出到控制台,也可以输出到文件。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    
    <!-- 定义appenders-->
	<Appenders>
        <!-- 以下定义输出到控制台的配置-->
        
		<Console name="Console" target="SYSTEM_OUT">
            <!-- -->
            
            <!--PatternLayout可以灵活地指定布局模式 -->
            <!-- %p 输出优先级 -->
            <!-- %d 输出日志时间点的日期-->
            <!-- %c 输出所属的类目,通常就是所在类的全名-->
            <!-- %m 输出代码中的指定日期-->
            <!-- %n 换行符-->
			<PatternLayout pattern="[%-5p] %d %c - %m%n" />
            
		</Console>
        
        <!-- 输出打印到文件-->
		<File name="File" fileName="dist/my.log">
            
			<PatternLayout pattern="[%-5p] %d %c - %m%n" />
		</File>
	</Appenders>
    
    
	<Loggers>
        <!--配置根logger,level是日志记录的优先级 -->
        <!--建议只使用四个级别 优先级从高到低分别是ERROR、WARN、INFO、DEBUG -->
        <!-- -->
		<Root level="INFO">
			<AppenderRef ref="File" />
			<AppenderRef ref="Console" />
		</Root>
	</Loggers>
    
    
</Configuration>

gers>







版权声明:本文为gao1213977085原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。