Built-in Tomcat logging log / sl4j

How can I make built-in tomcat write my logs to the log? I found some information on using standalone tomcat with log4j. But what does the installation look like for the built-in tomcat and logback?

This is maven dependent:

<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-logging-juli</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-logging-log4j</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${sl4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>${sl4j.version}</version> </dependency> 

I know that Spring Boot automatically integrates tomcat logging. But in this case, I cannot use Spring.

+5
source share
1 answer

Tomcat 8 has a ServiceLoader -based discovery engine that allows you to deploy your own registrar implementation.

Just implement org.apache.juli.logging.Log in a class that delegates Logback / SLF4J and puts the class name in the META-INF/services/org.apache.juli.logging.Log file in its class path. Then Tomcat will register through your class.

 import org.apache.juli.logging.Log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DelegateToSlf4jLogger implements Log { private final Logger logger; // constructor required by ServiceLoader public DelegateToSlf4jLogger() { logger = null; } public DelegateToSlf4jLogger(String name){ logger = LoggerFactory.getLogger(name); } @Override public boolean isDebugEnabled() { return logger.isDebugEnabled(); } @Override public boolean isErrorEnabled() { return logger.isErrorEnabled(); } @Override public boolean isFatalEnabled() { return logger.isErrorEnabled(); } @Override public boolean isInfoEnabled() { return logger.isInfoEnabled(); } @Override public boolean isTraceEnabled() { return logger.isTraceEnabled(); } @Override public boolean isWarnEnabled() { return logger.isWarnEnabled(); } @Override public void trace(Object message) { logger.debug(String.valueOf(message)); } @Override public void trace(Object message, Throwable t) { logger.debug(String.valueOf(message), t); } @Override public void debug(Object message) { logger.debug(String.valueOf(message)); } @Override public void debug(Object message, Throwable t) { logger.debug(String.valueOf(message), t); } @Override public void info(Object message) { logger.info(String.valueOf(message)); } @Override public void info(Object message, Throwable t) { logger.info(String.valueOf(message), t); } @Override public void warn(Object message) { logger.warn(String.valueOf(message)); } @Override public void warn(Object message, Throwable t) { logger.warn(String.valueOf(message), t); } @Override public void error(Object message) { logger.error(String.valueOf(message)); } @Override public void error(Object message, Throwable t) { logger.error(String.valueOf(message), t); } @Override public void fatal(Object message) { logger.error(String.valueOf(message)); } @Override public void fatal(Object message, Throwable t) { logger.error(String.valueOf(message), t); } } 
0
source

Source: https://habr.com/ru/post/1261707/


All Articles