实际上,我正在一个Java Web应用程序中工作,该应用程序创建于2006年(非常旧),但它已实现。
我正在尝试将Log4J - 1.2.15更新为Log4J 2 - 2.17.2这个项目以基本的方式实现了log4j,所以(我认为)这并不难。我只是更改了库并替换了导入,这样就解决了所有的问题,只需在主Log类中做一点更改。主Log类命名为“LogUtil”
package ibope.rhProducao.resources;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
//Antiguos imports para LOG4J
//import org.apache.log4j.Level;
//import org.apache.log4j.Logger;
//import org.apache.log4j.PropertyConfigurator;
/**
* Classe para setar as propriedades do Log4J
* através do arquivo log4j.properties
*
* @author Ederaildo Fontes
* @version 1.0
*/
public class LogUtil
{
public static Logger LOGGER;
public Logger getLogger(Class classe){
//Properties log4jProp = load("log4j.properties");
//PropertyConfigurator.configure(log4jProp);
LOGGER = LogManager.getLogger(classe);
setLogLevel(Level.DEBUG);
//LOGGER.atLevel(Level.OFF);
/* JDBCAppender app = (JDBCAppender) logger.getParent().getAppender("JDBC2");
logger.addAppender(app);
*/
return LOGGER;
}
public static void setLogLevel(Level l)
{
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration conf = ctx.getConfiguration();
conf.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(l);
ctx.updateLoggers(conf);
}
/**
* Método auxiliar que carrega o arquivo de propriedades
* @param nomeArquivo
* @return objeto Properties
*/
public Properties load(String nomeArquivo){
Properties prop = new Properties();
String propertiesPath = "";
propertiesPath = nomeArquivo;
boolean gotProps = false;
try {
InputStream stream = (getClass()).getResourceAsStream(propertiesPath);
if (stream != null) {
prop.load(stream);
} else {
System.out.println("arquivo properties nao encontrado");
}
} catch (java.io.IOException ioe) {
System.out.println("erro carregando properties " + propertiesPath);
}
return prop;
}
}
正如你所看到的,这个类并不干净,但它工作!嗯...主要的问题是Log4J 2不能识别WEB-INF中发布的Log4J2.xml,我这样说是因为在控制台中工作。
x1c 0d1x
阅读Log4J 2文档时,我发现Log4J在WEB-INF中搜索名为“log4j2-x.xml”的文件,并使用了找到的第一个文件。
我已经尝试了这么多的方式配置和移动文件,但没有工作。我只是试图创建一个file.log
log4j2-RhProducao.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="rollingFile"
fileName="log/application.log" filePattern="log/application-%d{yyyy-MM-dd-HH-mm}-%i.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd-HH:mm:ss} %-5p %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="1KB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="rollingFile" />
</Root>
</Loggers>
</Configuration>
log4j2.json
{
"configuration":
{
"appenders": {
"RandomAccessFile": {
"name": "FILE",
"fileName": "app.log",
"PatternLayout": {
"pattern": "%d %p %c{1.} [%t] %m%n"
}
},
"Console": {
"name": "STDOUT",
"PatternLayout": {
"pattern": "%highlight{[%-5level] - [%t] - .%c{1}: %msg%n}"
}
}
},
"loggers": {
"root": {
"level": "all",
"AppenderRef": [
{
"ref": "FILE"
}
]
}
}
}
}
这些是库
好吧...“log4j-web”只是一个绝望的尝试来解决它...我不知道是否影响了什么。
这是“www.example.com“文件所在的软件包LogUtil.java。x1c4d 1x
正如你所看到的,即使在这里,我有其他尝试的文件识别。我知道,对于许多原因,该项目是不干净的,但只是多次尝试解决这个问题。
甚至我在web.xml中添加了这个
此项目不使用Maven。
Java开发工具包:11 Servlet 3.1 Tomcat 8.5.73
我真的需要帮助:(借口我的英语 *
我尝试了所有我在互联网上找到的东西。
1条答案
按热度按时间ncecgwcz1#
在netbeans中,可以修改TomCat属性Here
在这里我们可以找到“平台”部分。在VM选项中,我们可以写入-Dlog4j2.debug=true
查看Log4J -〉Log!并找到我们的错误。
最后...使用此代码,我们可以添加定义(xml、json或yalm文件)的系统属性