Log4j работает без файла свойств - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно настроить log4j для проекта, в котором я нахожусь. Log4j работает нормально , но я нигде не могу найти log4j-properties.xml.Это связанные с log4j классы в моем webApplication, первый - это сервлет с именем "Log4JInitServlet.java":

открытый класс Log4JInitServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


public void init(ServletConfig config) throws ServletException {
    System.out.println("Log4JInitServlet is initializing log4j");
    String log4jLocation = config.getInitParameter("log4j-properties-location");

    ServletContext sc = config.getServletContext();


    if (log4jLocation == null) {
        System.err.println("*** No log4j-properties-location init param, so initializing log4j with BasicConfigurator");
        BasicConfigurator.configure();
    } else {
        String webAppPath = sc.getRealPath("/");
        String log4jProp = webAppPath + log4jLocation;
        File yoMamaYesThisSaysYoMama = new File(log4jProp);

        if (yoMamaYesThisSaysYoMama.exists()) {
            System.out.println("Initializing log4j with: " + log4jProp);                
            PropertyConfigurator.configure(log4jProp);
        } else {
            System.err.println("*** " + log4jProp + " file not found, so initializing log4j with BasicConfigurator");
            BasicConfigurator.configure();
        }
    }
    super.init(config);
}

/**
 * Log4JInitServlet?reloadPropertiesFile=true
 * Log4JInitServlet?logLevel=XXX
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("This is the Log4JInitServlet<br/>");
    String logLevel = request.getParameter("logLevel");
    String reloadPropertiesFile = request.getParameter("reloadPropertiesFile");
    if (logLevel != null) {
        setLogLevelWithParameter(out, logLevel);
    } else if (reloadPropertiesFile != null) {
        out.println("Attempting to reload log4j properties file<br/>");
        loadLog4jPropertiesFile(out);
    } else {
        out.println("no logLevel or reloadPropertiesFile parameters were found<br/>");
    }
}

private void setLogLevelWithParameter(PrintWriter out, String logLevel) {
    Logger root = Logger.getRootLogger();
    boolean logLevelRecognized = true;
    if ("DEBUG".equalsIgnoreCase(logLevel)) {
        root.setLevel(Level.DEBUG);
    } else if ("INFO".equalsIgnoreCase(logLevel)) {
        root.setLevel(Level.INFO);
    } else if ("WARN".equalsIgnoreCase(logLevel)) {
        root.setLevel(Level.WARN);
    } else if ("ERROR".equalsIgnoreCase(logLevel)) {
        root.setLevel(Level.ERROR);
    } else if ("FATAL".equalsIgnoreCase(logLevel)) {
        root.setLevel(Level.FATAL);
    } else {
        logLevelRecognized = false;
    }

    if (logLevelRecognized) {
        out.println("Log level has been set to: " + logLevel + "<br/>");
    } else {
        out.println("logLevel parameter '" + logLevel + "' level not recognized<br/>");
    }
}

private void loadLog4jPropertiesFile(PrintWriter out) {
    ServletContext sc = getServletContext();
    String log4jLocation = getInitParameter("log4j-properties-location");

    if (log4jLocation == null) {
        out.println("*** No log4j-properties-location init param, so initializing log4j with BasicConfigurator<br/>");
        BasicConfigurator.configure();
    } else {
        String webAppPath = sc.getRealPath("/");
        String log4jProp = webAppPath + log4jLocation;
        File log4jFile = new File(log4jProp);
        if (log4jFile.exists()) {
            out.println("Initializing log4j with: " + log4jProp + "<br/>");
            PropertyConfigurator.configure(log4jProp);
        } else {
            out.println("*** " + log4jProp + " file not found, so initializing log4j with BasicConfigurator<br/>");
            BasicConfigurator.configure();
        }
    }
}

}

второй - это класс с именем LogAgent.java:

открытый класс LogAgent {

public LogAgent(String pathLogName)
{
    FILE_LOG_NAME = "";
    FILE_LOG_NAME = pathLogName;
}

public void log(String messageInput)
{
    Calendar now = Calendar.getInstance();
    String message = (new StringBuilder("<")).append(now.get(5)).append("/").append(now.get(2) + 1).append("/").append(now.get(1)).append(" ").append(now.get(11)).append(":").append(now.get(12)).append(":").append(now.get(13)).append(":").append(now.get(14)).append(">").append("<").append(messageInput).append(">").toString();
    try
    {
        File t = new File(FILE_LOG_NAME);
        if(t.length() > LOG_MAXSIZE)
        {
            String newName = (new StringBuilder(String.valueOf(FILE_LOG_NAME))).append(".").append(now.get(5)).append("_").append(now.get(2) + 1).append("_").append(now.get(1)).append("_").append(now.get(10)).append("_").append(now.get(12)).append("_").append(now.get(13)).toString();
            File dest = new File(newName);
            t.renameTo(dest);
            t.delete();
        }
        FileWriter f = new FileWriter(FILE_LOG_NAME, true);
        f.write((new StringBuilder(String.valueOf(message))).append("\n").toString());
        f.close();
    }
    catch(Exception e)
    {
        System.err.println((new StringBuilder("LogAgent : log () : ")).append(e).toString());
    }
}

private static long LOG_MAXSIZE = 0x16E360;
private String FILE_LOG_NAME;

}

Как мне его настроить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...