我试图通过以下教程在我的Web应用程序中配置log4j2。我正在使用glassfish 4.1。1服务器和servlet版本3.1。我可以使用以下配置配置日志功能:
log4j。性质
# Root logger option
log4j.rootLogger=INFO, consoleAppender, fileAppender
# debug level logger
log4j.logger.kumar.suraj.college.administration.login=DEBUG
# Redirect log messages to console
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Target=System.out
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileAppender.File=E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
属性文件放在src/main/资源文件夹中
网状物xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>College Administration</display-name>
<!-- <context-param>
<param-name>log4jConfiguration</param-name>
<param-value>/log4j.properties</param-value>
</context-param>is it required
-->
<!--from where is this class referenced in dependency without web -->
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
定义文件位置的上下文参数被注释掉。默认情况下,log4j可能会查找名为log4j的文件。财产。不过,我只是想知道指定文件位置的方法是否正确。
我也不确定哪个jar是org。阿帕奇。登录中。log4j。网状物正在引用Log4jServletContextListener。我搜索了所有jar文件,但找不到这个类。
LoginServlet。JAVA
package kumar.suraj.college.administration.login;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import kumar.suraj.college.administration.adduser.AddUserServlet;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// final static Logger logger = LogManager.getLogger(LoginServlet.class);
final static Logger logger = Logger.getLogger(LoginServlet.class);
public LoginServlet() {
super();
}
@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
throws ServletException, IOException {
LoginServlet.logger.debug("debug level logging supported"); response.getWriter().append("Servedat:").append(request.getContextPath());
response.getWriter().append("Hello Suraj");
}
@Override
protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
LoginServlet.logger.debug("debug level logging supported");
this.doGet(request, response);
}
}
波姆。log4j的xml依赖关系
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
所有这些工作正常,我得到日志在两个控制台以及文件。但是,当我尝试更改配置按照以下链接:
https://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0 https://logging.apache.org/log4j/2.x/maven-artifacts.html
与前面指定的依赖项类似,我切换到
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.6.2</version>
</dependency>
log4japi和log4jcore作为可传递的依赖项添加到log4jweb中。罐子
我在LoginServlet中所做的其他更改。java是因为我在切换到log4j web后遇到编译时错误。jar,如下所示:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
final static Logger logger = LogManager.getLogger(LoginServlet.class);
// final static Logger logger = Logger.getLogger(LoginServlet.class);
主要的变化是logger变量的初始化和两个导入。rest所有配置保持原样。我还能够找到web中指定的侦听器类。log4jweb中的xml。在这种情况下,是jar。仍然无法使用此配置进行日志记录。
谁能帮我一下,或者告诉我我做错了什么?
好的,在对前面提到的链接进行了更多的研究和重新阅读之后,我终于在我的web应用程序中配置了log4j2,现在我得到了预期的日志。现在我想提一下我做错了什么。
如链接中所述https://logging.apache.org/log4j/2.x/manual/webapp.html
如果我使用Servlet3.0或更高版本,我不需要在部署描述符中注册Log4jServletContextListener类,它只需要在Servlet2.5或更低版本中注册。此外,如果遵守log4j2的命名约定,则不需要提供文件位置。
另一个更改,而不是log4j2。属性现在我使用的是log4j2。作为log4j2中属性文件格式的xml与log4j1中使用的格式不同。感谢下面链接中给出的答案,帮助我解决了这个问题。Log4j 2不支持Log4j。属性文件了吗?
有关当前支持的格式,请参阅链接https://logging.apache.org/log4j/2.0/manual/configuration.html#Properties
下面是我的部署描述符和log4j配置文件现在的外观:
网状物xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>College Administration</display-name>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
我在使用DOMConfigurator的JavaEE Web应用程序中使用Log4j时面临一个问题。我的类路径log4j.jar文件,log4j.xml文件的路径 /WEB-INF/config/log4j.xml. 以下是例外情况: 下面是获取log4j的代码。servlet中的xml文件: 进入网页。xml
问题内容: 我在使用在XML log4j配置文件中定义的附加程序进行记录时遇到麻烦。 我在EAR的META-INF文件夹上创建了 jboss-deployment-structure.xml ,没有成功。 在 JBoss的部署,structure.xml 结构为: 我什至尝试编辑我的 standalone.conf.bat 文件并添加以下行: 我的应用程序部署是这样的: 我注意到以下错误: 子部署
对于那些在生产中运行Go后端的人: 运行Go web应用程序的堆栈/配置是什么? 除了人们使用标准库NET/HTTP包来保持服务器的运行之外,我还没有看到关于这个主题的很多东西。我读过使用Nginx向Go服务器传递请求-Nginx with Go 这在我看来有点脆弱。例如,如果计算机重新启动(没有附加配置脚本),服务器将不会自动重新启动。 是否有更坚实的生产设置? 关于我的意图--我正在为我的下一
我正在使用log4j2库来管理日志记录过程。我创建了一个名为log4j2的配置文件。包含appender和logger配置的xml。然后,我在每个类中定义了一个记录器 我没有在任何地方指定conf文件的名称,所以我认为库隐式地获取并读取它。 现在,我需要以jar文件的形式提供我的应用程序,所以我需要使配置文件可用,以便用户可以修改和配置它。 在我的例子中,我建议在jar文件级别创建一个XXX文件夹
我正在尝试在web应用程序中使用Freemarker进行电子邮件模板制作。 我声明了一个FreeMarkerConfiguration FactoryBean,如下所示: 运行我的JUnit时一切正常,但在我的webapp中运行时,我的bean被Spring启动FreeMarkerAutoConfiguration“覆盖”。 我已尝试: 从我的gradle文件中删除sping-boot-start
我使用log4j(1.2.15)来登录我的应用程序,其中我有两个用于两个不同包(darius.log4j.sql和darius.log4j.net)的文件追加器和一个控制台追加器。其配置如下: 我现在需要的是以编程方式添加一个新的文件appender,如果出现特定的数据组合。我知道如何定义这个新的文件appender(前C),但我不知道如何设置级别和新的appender到第三个包: 其中C是第三个