Рубрики
Без рубрики

Учебник по Log4j

Учебник по Log4j, log4j на java, учебник по java log4j, пример java log4j, ведение журнала сервлета log4j, пример веб-приложения log4j, пример кода jars maven log4j

Автор оригинала: Pankaj Kumar.

Добро пожаловать в учебник log4j. Log4j-наиболее часто используемая платформа ведения журнала в приложениях java. В этом учебнике log4j мы рассмотрим основы log4j , его конфигурацию, а затем увидим его в действии в автономном приложении java, а затем в веб-приложении java .

Учебник Log4j

Прежде чем мы начнем с примеров log4j, первым шагом является получение банок log4j. Существует множество способов загрузки банок log4j.

  1. Мое любимое – получить все зависимости через Maven. Вы можете добавить следующие зависимости в свой pom.xml файл, чтобы получить банку log4j.
  2. Если вы используете gradle , добавьте зависимость как: 'log4j:log4j:1.2.17'
  3. Если вы не используете какие-либо инструменты сборки, вы можете загрузить jar log4j с Официальной страницы Apache Log4j и включить в свой путь к классам проекта.

Конфигурация Log4j

Log4j поддерживает как конфигурацию на основе свойств, так и конфигурацию на основе XML. Здесь я буду использовать конфигурацию на основе XML, вы можете увидеть конфигурацию на основе свойств log4j в связанном сообщении.

Log4j поддерживает как конфигурацию на основе свойств, так и конфигурацию на основе XML. Здесь я буду использовать конфигурацию на основе XML, вы можете увидеть конфигурацию на основе свойств log4j в связанном сообщении.







	
	
		
		
			
		
	
	
	
	
		
		
		
		
		

		
			
		
	


	
		
		
		
	

	
		
		
	

	
		
		
		
	


Наиболее важной частью файлов конфигурации log4j являются:

  1. Приложения : Здесь мы определяем стратегию ведения журнала, например, какой тип класса приложений использовать, например org.apache.log4j.ConsoleAppender или org.apache.log4j.RollingFileAppender . org.apache.log4j.PatternLayout используется для определения шаблона ведения журнала. %d %d{Z} [%t] %-5p (%F:%L) - %m%n добавит время, поток, уровень ведения журнала, имя класса с номером строки. Мы можем определить любое количество добавлений в нашем файле конфигурации log4j.
  2. регистратор : Он используется для обеспечения сопоставления между пакетами/классами java с добавлениями и уровнями ведения журнала. Как вы можете видеть, с одним регистратором можно использовать несколько приложений. Если несколько регистраторов совпадают с пакетом классов java, используется более конкретный.
  3. root : Используется, когда для пакетов Java больше не определено. Например, если у вас есть несколько классов в com.journaldev.beans пакете, то он не будет совпадать ни с одним регистратором. Таким образом, корневой регистратор будет использоваться для регистрации конфигураций.

Как только файл конфигурации log4j будет готов, мы должны настроить его в коде, прежде чем мы сможем начать ведение журнала. Ниже приведен способ сделать это.

//for XML based configuration
DOMConfigurator.configure("log4j.xml");
//for properties based configuration
PropertyConfigurator.configure("log4j.properties");

Обратите внимание, что если имя файла конфигурации log4j равно log4j.xml или log4j.свойства , тогда мы можем пропустить этот шаг, потому что log4j пытается автоматически загрузить эти файлы из пути к классам.

Использование Java Log4j

Теперь давайте посмотрим, как их можно использовать в коде. Мы создали два класса для наших выше определенных регистраторов.

package com.journaldev.log4j.main;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

import com.journaldev.log4j.logic.MathUtils;

public class Log4jExample {

	static{
		init();
	}
	
	private final static Logger logger = Logger.getLogger(Log4jExample.class);
	
	public static void main(String[] args) {

		logger.debug("My Debug Log");
		logger.info("My Info Log");
		logger.warn("My Warn Log");
		logger.error("My error log");
		logger.fatal("My fatal log");
		
		MathUtils.add(4,5);
		MathUtils.add(40,50);
		MathUtils.add(1,5);
		
	}

	/**
	 * method to init log4j configurations
	 */
	private static void init() {
		DOMConfigurator.configure("log4j.xml");
	}

}

Мы можем создать окончательный экземпляр регистратора один раз, а затем повторно использовать его в классе. Обратите внимание, что я настраиваю log4j в init() метод, который вызывается во время загрузки класса в статический блок .

package com.journaldev.log4j.logic;

import org.apache.log4j.Logger;

public class MathUtils {

	private static final Logger logger = Logger.getLogger(MathUtils.class);
	
	public static int add(int x, int y){
		logger.debug("inputs are:"+x+", "+y);
		return x+y;
	}
}

Теперь, когда мы запустим выше основной метод, мы получим нижеприведенные журналы в файле main.log.

2016-05-12 21:22:44,610 +0530 [main] DEBUG (Log4jExample.java:18) - My Debug Log
2016-05-12 21:22:44,611 +0530 [main] INFO  (Log4jExample.java:19) - My Info Log
2016-05-12 21:22:44,611 +0530 [main] WARN  (Log4jExample.java:20) - My Warn Log
2016-05-12 21:22:44,612 +0530 [main] ERROR (Log4jExample.java:21) - My error log
2016-05-12 21:22:44,612 +0530 [main] FATAL (Log4jExample.java:22) - My fatal log

Вы также увидите печать журналов в консоли.

DEBUG Log4jExample - My Debug Log
INFO  Log4jExample - My Info Log
WARN  Log4jExample - My Warn Log
ERROR Log4jExample - My error log
FATAL Log4jExample - My fatal log

Обратите внимание, что из класса MathUtils не печатаются журналы, это потому, что уровень регистратора-это ИНФОРМАЦИЯ, которая выше, чем ОТЛАДКА. Просто измените уровень ведения журнала для отладки, как показано ниже.


	
	

Теперь, когда вы снова запустите программу, в файле main.log также будут содержаться нижеприведенные журналы.

2016-05-12 21:23:56,151 +0530 [main] DEBUG (MathUtils.java:10) - inputs are:4, 5
2016-05-12 21:23:56,151 +0530 [main] DEBUG (MathUtils.java:10) - inputs are:40, 50
2016-05-12 21:23:56,153 +0530 [main] DEBUG (MathUtils.java:10) - inputs are:1, 5

Вот и все для использования log4j в автономном приложении java. На рисунке ниже показана окончательная структура проекта в eclipse.

Вы можете скачать этот проект по ссылке ниже.

Веб-приложение Java Log4j

Теперь давайте посмотрим, как использовать log4j в веб-приложении java. Создайте “Динамический веб-проект”, а затем преобразуйте его в Maven. На рисунке ниже показана окончательная структура проекта.

Ниже приведен файл конфигурации log4j.

Ниже приведен файл конфигурации log4j.







	
	
		
		
			
		
	
	
	
	
		
		
		
		
		

		
			
		
	


	
		
		
		
	

	
		
		
		
	


Более или менее это похоже на предыдущую конфигурацию, за исключением того, что мы вводим переменную catalina.home для создания файлов журналов в каталог журналов tomcat.

Поскольку мы должны настроить log4j до его использования, мы можем загрузить его, определив ServletContextListener , как показано ниже.

package com.journaldev.log4j.servlet;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.apache.log4j.xml.DOMConfigurator;

@WebListener
public final class Log4jInitListener implements ServletContextListener {

    public Log4jInitListener() {
    }

    public void contextDestroyed(ServletContextEvent paramServletContextEvent)  { 
    }

    public void contextInitialized(ServletContextEvent servletContext)  { 
    	String webAppPath = servletContext.getServletContext().getRealPath("/");
	String log4jFilePath = webAppPath + "WEB-INF/classes/my-log4j.xml";
    	DOMConfigurator.configure(log4jFilePath);
    	System.out.println("initialized log4j configuration from file:"+log4jFilePath);
    }
	
}

Обратите внимание на использование ServletContext для получения полного пути к файлу конфигурации log4j. Это что-то дополнительное, что мы должны сделать, потому что мы не знаем полного пути к файлу log4j во время выполнения, и мы также не хотим его жестко кодировать.

Ниже приведен простой класс сервлета, использующий регистратор для регистрации некоторых сообщений.

package com.journaldev.log4j.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	private static final Logger logger = Logger.getLogger(MyServlet.class);
	
    public MyServlet() {
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		logger.info("Name parameter value = "+name);
		
		PrintWriter out = response.getWriter();
		
		out.append("Served at: ").append(request.getContextPath());
		out.append("\n\nHello "+name);
		out.flush();
	}

}

Просто экспортируйте проект в виде файла WAR, а затем разверните на сервере Tomcat, как показано на рисунке ниже, когда мы вызываем сервлет в браузере.

Вы получите журналы следующего вида в каталоге журналов tomcat в файле main.log.

pankaj:logs pankaj$ tail -f main.log 
2016-05-12 21:46:33,038 +0530 [http-nio-8080-exec-2] INFO  (MyServlet.java:29) - Name parameter value = Pankaj

Поскольку мы также входим в консоль, которая переходит в файл catalina.out, вы найдете ниже журналы в файле журнала catalina.

pankaj:logs pankaj$ tail -f catalina.out 
INFO  MyServlet - Name parameter value = Pankaj

Вот и все для краткого руководства по log4j, вы можете скачать пример проекта веб-приложения Log4j по ссылке ниже.

Список литературы :