У меня есть чистая установка tomcat7 с включенным log4j (согласно http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j). «Журналирование на уровне приложения» использует конфигурацию log4j (я направляю журналы на локальный сервер syslog). Как я могу сделать свое приложение access.log также использовать log4j? Насколько я могу судить, я могу выбирать между AccessLogValve, ExtendedAccessLogValve и JDBCAccessLogValve, но из их числа я могу войти в syslog или использовать log4j.Доступ к Tomcat через log4j?
3
A
ответ
3
Проект log4j-scribe-appender содержит Log4JAccessLogValve, который позволит вам сделать именно это.
0
если вы используете Tomcat 7, вы можете продлить AccessLogValve путем переопределения эту функцию:
/**
* Log the specified message to the log file, switching files if the date
* has changed since the previous log call.
*
* @param message Message to be logged
*/
public void log(String message) {
rotate();
/* In case something external rotated the file instead */
if (checkExists) {
synchronized (this) {
if (currentLogFile != null && !currentLogFile.exists()) {
try {
close(false);
} catch (Throwable e) {
ExceptionUtils.handleThrowable(e);
log.info(sm.getString("accessLogValve.closeFail"), e);
}
/* Make sure date is correct */
dateStamp = fileDateFormatter.format(
new Date(System.currentTimeMillis()));
open();
}
}
}
// Log this message
synchronized(this) {
if (writer != null) {
writer.println(message);
if (!buffered) {
writer.flush();
}
}
}
}
0
Это работает для JDK-каротажа:
package org.apache.plugins;
import java.util.logging.Logger;
import org.apache.catalina.valves.AccessLogValve;
public class AccessLogJdkValve extends AccessLogValve {
private static Logger jdkLogger = Logger.getLogger(AccessLogJdkValve.class.getName());
@Override
public void log(String msg) {
jdkLogger.info(msg);
}
@Override
protected synchronized void open() {
// do nothing
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tomcat7-conf</groupId>
<artifactId>tomcat7-conf</artifactId>
<version>1.0-RELEASE</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>common-tomcat-maven-plugin</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>7.0.12</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Просто скомпилируйте, сделайте банку, поместите копию в /usr/share/tomcat7/lib/
и измените server.xml
. Я добавил его к моему reference tomcat7 configuration на github.
После моего теста приложение log4j-scribe-appender работает ТОЛЬКО с Tomcat 6. Необходимо переписать Log4JAccessLogValve с Tomcat 7. – Ben