Log4j不支持多个appender

kqlmhetl  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(118)

我试图创建一个简单的登录使用Apache Tomcat和Java。为此,我想记录到两个不同的文件。

@WebServlet("/login")
public class ServletLogin extends HttpServlet {

    private static final Logger logger = LogManager.getLogger(ServletLogin.class);

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if (username != null && !username.isEmpty() && password != null && !password.isEmpty()) {
            if (login(WebServletContextListener.db1, username, password)) {
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                session.setAttribute("loggedIn", true);
                logger.info("Login succeeded for user: {}", username);
                logger.debug("Further information...");
                response.sendRedirect("jsp/management.jsp");
                return;
            } else {
                logger.info("Login failed for user: {}", username);
                 logger.debug("Further information...");
            }
        }
        response.sendRedirect("jsp/login.jsp?error=1");
    }

这是相应的log4j2.xml文件:

<Configuration status="WARN">
    <Appenders>
        <!-- Define a File appender -->
        <File name="LogHistoryFile" fileName="logs\history.${date:yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
        <File name="LogDebugFile" fileName="logs\debug.${date:yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>
    <Loggers>
        <!-- Reference a File appender -->
        <Root level="info">
            <AppenderRef ref="LogHistoryFile" />
        </Root>
    </Loggers>
</Configuration>

不幸的是,当向log4j2.xml添加第二个appender时,没有任何东西会被记录。

<Root level="debug">
   <AppenderRef ref="LogDebugFile" />
</Root>

也许你们中有人知道我在处理什么问题,甚至有一个以前讨论过这个主题的线索。
谢谢你的帮助!

gv8xihay

gv8xihay1#

我不是100%确定你想归档什么。但据我所知,你会过滤不同文件中的信息。
如果是,您可以为不同的主机添加ThresholdFilter

<Configuration status="WARN">
    <Appenders>
        <!-- Define a File appender -->
        <File name="LogHistoryFile" fileName="logs\history.${date:yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        </File>
        <File name="LogDebugFile" fileName="logs\debug.${date:yyyy-MM-dd}.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>            
        </File>
    </Appenders>
    <Loggers>
        <!-- Reference a File appender -->
        <Root level="debug">
            <AppenderRef ref="LogHistoryFile" />
            <AppenderRef ref="LogDebugFile" />
        </Root>
    </Loggers>
</Configuration>

相关问题