基本上,当使用log4j时,我知道我们必须使用Logger.getLogger(MyClass.class)或Logger.getLogger("MyClass")来启动Logger.
我有太多的课程,我不想在每个课程中添加这个陈述.相反,我喜欢做的就是这个
Logger.info(this,"My message");
Run Code Online (Sandbox Code Playgroud)
Logger是我编写的一个类(不是log4j中的那个),它反过来启动一个Logger类型的对象(org.apache.log4j.Logger)并继续传递消息.
这是我的Logger.java
package com.mypackage;
/**
* @author Sriram Sridharan
*Custom logging implementation using log4j
*/
public class Logger {
private static org.apache.log4j.Logger logger;
/**
* Writes an INFO log
* @param oClass
* @param message
*/
public static void INFO(Object oClass, String message){
org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(oClass.getClass());
logger.info(message);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我有自己的类,它调用此Logger实现来记录事件.它看起来像这样
public class MyClass {
public void myMethod(){
com.mypackage.Logger.INFO(this, "Hello, World");
}
}
Run Code Online (Sandbox Code Playgroud)
我没有日志问题.他们很好.但是,日志中显示的类名称是相同的(Logger).这是输出
INFO [main] (Logger.java:18) - Hello, World
Run Code Online (Sandbox Code Playgroud)
我期待这个
INFO [main] (MyClass.java:18) - Hello, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个JavaScript,当用户将鼠标悬停在DOM上时,它会突出显示DOM中的元素.这应该是一个跨浏览器的外部插件.理想情况下,我试图模仿浏览器检查器工具的行为.
我不能说我没有成功,但我有两种选择,都有自己的优点和缺点.
方法1
我处理mouseover
事件并简单地向目标元素添加边框.当我将鼠标悬停在另一个元素上时,我只是重置了现有的突出显示元素.相同的代码如下:
function addHighlight(target) {
target.classList.add('highlighted');
}
function removeHighlight(target) {
target.classList.remove('highlighted');
}
window.addEventListener('mouseover',function(e) {
addHighlight(e.target);
});
window.addEventListener('mouseout',function(e) {
removeHighlight(e.target);
});
Run Code Online (Sandbox Code Playgroud)
这种方法的优点
它工作得非常好.
有这种方法的缺点
当我为现有DOM元素添加边框时,它会重新排列页面上的元素,您可以观察到元素的轻微改组效果.看起来不太棒.
方法2
我希望突出显示是无缝的.也就是说,保留页面的外观并简单地在元素顶部覆盖高亮蒙版.
为此,在这种情况mouseover
下,我动态创建了一个掩码元素,其position
设置为absolute
和其坐标设置为目标元素的精确坐标.以下是我的代码:
window.addEventListener('mouseover',function(e) {
applyMask(e.target);
});
function applyMask(target) {
if(document.getElementsByClassName('highlight-wrap').length > 0) {
resizeMask(target);
}else{
createMask(target);
}
}
function resizeMask(target) {
var rect = target.getBoundingClientRect();
var hObj = document.getElementsByClassName('highlight-wrap')[0];
hObj.style.top=rect.top+"px";
hObj.style.width=rect.width+"px";
hObj.style.height=rect.height+"px";
hObj.style.left=rect.left+"px";
// hObj.style.WebkitTransition='top 0.2s';
}
function createMask(target) {
var rect = target.getBoundingClientRect(); …
Run Code Online (Sandbox Code Playgroud) 我有一个依赖于另外两个 bean 的@Service
调用。UserServiceImpl
一个是UserRepository
bean,另一个是名为 的 bean SessionService
。
我的要求是在 UserServiceImpl 类的测试期间,我必须能够注入SessionService
依赖项的模拟,但保持UserRepository
依赖项不变。
我的服务类如下所示:
@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private SessionService sessionService;
@Override
public User create(User user) {
log.info("User Creation at Service");
// ... Do some validations .. //
// This needs to be mocked in Unit Tests
String returnValue = sessionService.doSomethingThatIDontWantInTests();
user.setInternalKey(returnValue);
// .. Do some more Validations .. //
return userRepository.save(user);
}
} …
Run Code Online (Sandbox Code Playgroud) java ×2
css3 ×1
html5 ×1
javascript ×1
log4j ×1
logging ×1
mockito ×1
spring-boot ×1
unit-testing ×1