I´m trying to create a simple Login using Apache Tomcat and Java. For this I want to log to two different files.
@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");
}
This is the corresponding log4j2.xml file:
<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>
Unfortunately, when adding to the log4j2.xml a second appender, nothing at all gets logged anymore.
<Root level="debug">
<AppenderRef ref="LogDebugFile" />
</Root>
Maybe somebody of you have an idea what problem I´m dealing with or even has a thread where this topic has been discussed before.
Thanks for your help!
I am not 100% sure what do you want to archive. But from what I understand, you will filter the message in the different files.
If yes you can add a ThresholdFilter
for the different Appender:
<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>