小编Seq*_*oia的帖子

如何在运行时更改特定用户/线程的日志级别

我正在使用slf4j与log4j 2.0或logback作为实现.例如,我的s​​ervlet有一个级别为ERROR的记录器,我的服务器产生了servlet的100个线程.我将在运行时获得一个特殊用户列表.当我检测到一些连接的特殊用户时.我想将这些特殊用户/线程的日志级别更改为DEBUG,并使其他线程的日志级别不受影响(仍然是ERROR).

我知道logback中的TurboFilter和log4j 2.0中的DynamicThresholdFilter,但由于我只在运行时获取特殊用户列表,所以我无法使用它们.

这是我的申请:

package com.example.logging;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServlet;

import org.slf4j.*;

public class App extends HttpServlet {

    private final Logger Logger = LoggerFactory.getLogger(App.class);
    Map<String, String> map = new HashMap<String, String>();

    public App() {
        map.put("user1", "DEBUG");
        map.put("user2", "DEBUG");
        map.put("user3", "ERROR");
    }

    public void writeToLogFile(String userName) {

        if (map.containsKey(userName)) {
            // do something so that I can change the logger to the corresponding log level
        }

        Logger.error(userName + " error message");

        // the logger is of level ERROR, …
Run Code Online (Sandbox Code Playgroud)

java logging multithreading logback log4j2

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

为什么mysql评估(TRUE或TRUE和FALSE)为true?

如果你输入

SELECT (true or true and false) 
Run Code Online (Sandbox Code Playgroud)

在mysql中它将返回1哪个true.为什么会这样?布尔表达式中的评估顺序是什么?

mysql sql

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

标签 统计

java ×1

log4j2 ×1

logback ×1

logging ×1

multithreading ×1

mysql ×1

sql ×1