小编Sri*_*ran的帖子

log4j:当我从另一个类调用记录器时,在日志中显示的类名称不正确

基本上,当使用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)

java logging log4j

2
推荐指数
1
解决办法
4262
查看次数

JavaScript - 突出显示悬停上的元素

我正在尝试编写一个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)

javascript html5 css3

2
推荐指数
2
解决办法
1004
查看次数

Spring Boot Mockito - @InjectMocks - 如何仅模拟选定的依赖项

我有一个依赖于另外两个 bean 的@Service调用。UserServiceImpl一个是UserRepositorybean,另一个是名为 的 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 unit-testing mockito spring-boot

1
推荐指数
1
解决办法
4541
查看次数

标签 统计

java ×2

css3 ×1

html5 ×1

javascript ×1

log4j ×1

logging ×1

mockito ×1

spring-boot ×1

unit-testing ×1