self4j log4j配置与调用

本文介绍如何使用SLF4J结合Log4j进行日志记录配置,包括依赖引入、属性文件设置及不同级别的日志输出示例。

slf4j-api定义了日志的接口,可以使用不同的日志类实现接口,此处以log4j 为例:


引入slf4j-api,slf4j-log4j12 jar包

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.25</version>
			<scope>test</scope>
		</dependency>
添加log4j.properties

### 设置###
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/error.log ###
### 按日期org.apache.log4j.DailyRollingFileAppender 
### 按文件大小org.apache.log4j.DailyRollingFileAppender   
log4j.appender.D =org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
### log4j.appender.D.MaxFileSize=1KB
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =logs/error.log
### log4j.appender.E.MaxFileSize=1KB 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
添加测试代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class SelfLog4jTest {
private static Logger logger = LoggerFactory.getLogger(SelfLog4jTest.class);


public static void main(String[] args) {
for(int i=0;i<10;i++){
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
// 记录error级别的信息
logger.error("This is error message,{}---{}.","admin","123");
}
}
}


### 关于 `self._log_alert` 的用法及常见问题解决方案 在 Selenium 自动化测试框架中,`self._log_alert` 并不是一个标准 API 或者官方定义的功能名称。然而,基于上下文中提及的相关技术背景(如 PhantomJS 和 Selenium 处理 JavaScript 弹窗的方式),可以推断出此方法可能是开发者自定义的一个内部工具函数,用于捕获和记录浏览器中的警告框 (`alert`) 日志信息。 以下是对其可能实现方式及相关注意事项的深入剖析: #### 1. **功能概述** `self._log_alert` 主要目的是监听并记录由网页脚本引发的所有弹窗消息内容(包括但不限于普通的 `alert()` 对话框)。通过这种方式可以帮助试人员更方便地追踪前端行为表现是否符合预期设定值范围之内[^2]。 此类机制通常涉及到以下几个关键技术要点: - 利用 WebDriver 提供的基础能力访问底层浏览器引擎暴露出来的特殊接口; - 定义合适的钩子函数拦截特定类型的用户交互事件流; - 将捕捉到的结果妥善保存下来以备后期分析审查之需。 #### 2. **典型应用场景模拟** 假设我们正构建一个继承自 unittest.TestCase 的定制化测试基类 TestBase ,那么可以在其中加入如下所示片段来展示如何优雅地集成这一特性: ```python from selenium import webdriver import os class TestBase(unittest.TestCase): @classmethod def setUpClass(cls): mypath = "/usr/local/bin" cls.browser = webdriver.PhantomJS(executable_path=os.path.join(mypath, "phantomjs")) # 添加命令扩展支持 phantomjs 特定 api 调用 cls.browser.command_executor._commands["executePhantomScript"] = ("POST", '/session/$sessionId/phantom/execute') # 初始化日志收集器 cls.alert_logs = [] def _log_alert(self): """ 记录所有出现过的 alert 弹窗文本信息。 """ script = ''' var page = require('webpage').create(); page.onAlert = function(msg){ console.log("ALERT:" + msg); }; return null; ''' result = self.browser.execute('executePhantomScript', {'script': script, 'args': []}) logs = self.browser.get_log('browser') alerts = [entry['message'] for entry in logs if entry['level']=='INFO' and 'ALERT:' in entry['message']] self.alert_logs.extend(alerts) @classmethod def tearDownClass(cls): cls.browser.quit() # Example Usage within test case methods... def test_something_with_possible_alert(self): url = "http://example.com/page_that_may_trigger_an_alert.html" self.browser.get(url) self._log_alert() assert any(["Expected Alert Message" in log for log in self.alert_logs]), "Did not find expected alert message!" ``` 在此案例演示过程中需要注意几点事项: - 必须提前注册额外新增加的支持 executePhantomScript 动作指令集才能正常运作; - get_log 方法每次读取完毕之后都会自动清除缓存区内容所以要及时处理获取得到的数据以防丢失重要线索证据链断裂影响最终判定结论准确性[^1]; 另外值得注意的是由于 PhantomJS 已经停止维护更新迭代版本号多年时间过去了现在推荐切换迁移到 Headless Chrome/Firefox 等更加现代化替代方案上去继续开展工作实践探索研究创新突破自我超越极限追求卓越品质享受生活乐趣无限精彩纷呈好戏连台永不落幕! --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值