Сегодня вечером я прочитал хорошую статью о реализации ведения журналов на уровне приложений с использованием 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.

