Сегодня вечером я прочитал хорошую статью о реализации ведения журналов на уровне приложений с использованием log4J, и я подумал, что эту концепцию можно расширить и абстрагировать еще на один уровень, используя API ведения журнала Apache Commons . Использование API ведения журнала Apache Commons позволяет абстрагировать реализацию журналирования от приложения; в результате код приложения регистрируется, который можно использовать повторно, даже если реализация ведения журнала изменяется. В течение многих лет была некоторая критика API Commons Logging, и я обращусь к этому, сказав, что тот же принцип может быть применен к другому фасаду регистрации, подобному SLF4J .
Хватит говорить, давайте начнем …
Шаг 1:
Сначала я создал приложение JBoss AS7 в OpenShift под названием «commonslogging».
Затем я открыл командную строку (или терминал) и клонировал репозиторий Git на свой компьютер, используя команду Git, указанную OpenShift при создании проекта.
Шаг 2:
Затем я импортировал проект как проект Maven в Eclipse, используя локальный репозиторий Git.
Рисунок 1: Импорт проекта в Eclipse
Рисунок 2: Создание нового проекта Maven в Eclipse
Шаг 3:
Затем вам нужно будет загрузить API Commons Logging и реализацию log4J, если у вас их еще нет. Вы можете найти их здесь:
Затем я добавил зависимости Commons Logging и log4j в файл Maven pom.xml.
<dependency> <groupid>commons-logging</groupid> <artifactid>commons-logging</artifactid> <version>1.1.1</version> </dependency> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>1.2.17</version> </dependency>
Шаг № 4:
Затем разверните папку / src / main / webapp и создайте новый файл «index.jsp».
Заменить содержимое следующим:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>OpenShift Apache Commons Logging Test</title> </head> <body> This is a test page to demonstrate a test with Apache Commons Logging and log4j application level logging. <p> <a href="Log4jTest">Click here to Invoke Logger</a> </p> </body> </html>
Вы можете удалить файл «index.html», созданный мастером приложения OpenShift.
Шаг № 5:
Создайте новый класс Java «Log4jTest.java» в папке / src / main / java.
Замените содержимое по умолчанию следующим кодом:
package org.ericsilva.openshift.commonslogging; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Tests the log4j implemenation using Apache Commons Logging API. * * @author Eric Silva (ES) */ public class Log4jTest extends HttpServlet { /** * Serialization UID. */ private static final long serialVersionUID = 1L; /** * Logger instance */ private Log log = LogFactory.getLog("test"); /** * {@inheritDoc} */ protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { log.info("from log4j=== test log4j log"); log.debug("from log4j=== test log4j debug log"); log.error("from log4j=== test log4j error log"); System.out .println("from system.out.println==== test system.out.println log"); System.err .println("from system.err.println==== test system.error.println log"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("from printwriter=== test printwriter log"); try { List<String> ar = new ArrayList<String>(); ar.add("1"); ar.add("2"); log.info("from log4j=== get arraylist index=2" + ar.get(2)); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); log.error("from log4j=== error===" + e.getMessage(), e); System.err.println("from system.err.println=== error===" + e.getMessage()); } out.close(); } }
Шаг № 6:
Откройте файл «web.xml» в папке / src / main / webapp / WEB-INF и добавьте следующее отображение сервлета:
<servlet> <servlet-name>Log4jTest</servlet-name> <servlet-class>org.ericsilva.openshift.commonslogging.Log4jTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>Log4jTest</servlet-name> <url-pattern>/Log4jTest</url-pattern> </servlet-mapping>
Вам нужно будет изменить имя пакета файла Log4jTest.java на имя пакета, которое вы использовали при создании файла.
Шаг № 7:
Создайте новый файл «log4j.properties» в папке / src / main / resources.
Вставьте следующее содержимое в файл:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger log4j.rootLogger=INFO, test log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[%d{MM/dd HH:mm:ss.SSS}][%p]%c{1}:%L - %m%n log4j.appender.CONSOLE.Threshold=INFO # My Application Log log4j.appender.test=org.apache.log4j.RollingFileAppender log4j.appender.test.File=logs/application.log log4j.appender.logfile.Threshold=INFO log4j.appender.test.MaxBackupIndex=100 log4j.appender.test.MaxFileSize=1Gb log4j.appender.test.encoding=UTF8 log4j.appender.test.layout=org.apache.log4j.PatternLayout log4j.appender.test.layout.ConversionPattern=<%d> <%t> <%p> <%F:%L> - %m%n
Шаг № 8:
Последнее, что нам нужно сделать, — это создать папку «META-INF» в папке / src / main / webapp и добавить файл дескриптора «jboss-deploy-structure.xml», чтобы указать ей использовать API регистрации Commons вместо стандартная реализация «java.util.logging».
После создания папки META-INF и дескриптора XML добавьте следующее содержимое в файл XML:
<jboss-deployment-structure> <deployment> <exclusions> <module name="org.apache.commons.logging" /> </exclusions> </deployment> </jboss-deployment-structure>
Шаг № 9:
Затем зафиксируйте ваши изменения в вашем локальном репозитории Git, а затем отправьте изменения обратно в OpenShift. OpenShift автоматически попытается развернуть ваш новый код.
Шаг № 10:
Затем откройте URL вашего приложения в вашем любимом браузере, например, http://commonslogging-ericsilva.rhcloud.com/
Нажмите на ссылку на странице. Это приведет к ошибке, которая появится в файле журнала вашего приложения.
Для получения информации о том, как подключиться через SSH к вашему приложению для доступа к командной строке, я предлагаю прочитать эту статью .
Удачного кодирования. Я действительно хочу сделать больше с OpenShift.