JSP 如何在Java Web应用程序中配置Log4J 2- TomCat

t3psigkw  于 2022-12-07  发布在  Java
关注(0)|答案(1)|浏览(174)

实际上,我正在一个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
我真的需要帮助:(借口我的英语 *
我尝试了所有我在互联网上找到的东西。

ncecgwcz

ncecgwcz1#

在netbeans中,可以修改TomCat属性Here
在这里我们可以找到“平台”部分。在VM选项中,我们可以写入-Dlog4j2.debug=true
查看Log4J -〉Log!并找到我们的错误。
最后...使用此代码,我们可以添加定义(xml、json或yalm文件)的系统属性

String path = Thread.currentThread().getContextClassLoader().getResource("/").toURI().resolve("../log4j2.json").getPath();
URL mFile = new File(path).toURI().toURL();
System.setProperty("log4j2.configurationFile", mFile.getPath());

相关问题