Tomcat logs are essential tools for monitoring and troubleshooting Java web applications. They provide valuable insights into your application's behavior, performance, and potential issues. This guide will walk you through the process of finding, configuring, and utilizing Tomcat logs effectively — from basic setups to advanced environments.

Understanding Tomcat Logs

Tomcat logs are records of events and activities that occur within the Apache Tomcat server. These logs are crucial for:

  • Debugging application errors
  • Monitoring server performance
  • Tracking user activity
  • Ensuring security compliance

Tomcat generates several types of log files:

  1. catalina.out: The main log file containing stdout and stderr output
  2. localhost.log: Application-specific logs for the default host
  3. manager.log: Logs related to the Tomcat Manager application
  4. host-manager.log: Logs for the Host Manager application

Tomcat uses different log levels to categorize the severity of logged events:

Log LevelAnalogyDescription
SEVEREFire AlarmIndicates a critical issue that needs immediate attention, like a system crash or failure.
WARNINGSmell of SmokeSignals a potential problem that should be monitored and addressed to prevent escalation.
INFODaily News UpdateProvides general information about the system's operations and events.
CONFIGSetting Up EquipmentLogs messages related to the configuration and setup of the system.
FINEGPS DirectionsOffers detailed information about the application's operation, like tracing steps.
FINERStep-by-Step Assembly GuideProvides even more detailed trace information for debugging purposes.
FINESTMicroscope ViewDelivers the most detailed logging, capturing every minute detail of the application's execution.

These levels help you filter and prioritize log messages based on their importance.

Locating Tomcat Log Files

The location of Tomcat log files varies depending on your operating system and installation method. Here's where you can typically find them:

  • Linux: /var/log/tomcat/
  • Windows: C:\Program Files\Apache Software Foundation\Tomcat\logs\
  • macOS: /usr/local/tomcat/logs/

If you're running Tomcat in different environments, log locations may vary:

  • IDE (e.g., Eclipse, IntelliJ IDEA): Check the console output or project-specific log directory
  • Standalone: CATALINA_HOME/logs/
  • Docker: Within the container at /usr/local/tomcat/logs/

To locate logs in non-standard installations:

  1. Check your Tomcat configuration files (server.xml, catalina.properties)
  2. Use the find command (Linux/macOS) or File Explorer search (Windows)
  3. Review your application's startup scripts for custom log paths

Accessing Logs in Containerized Environments

For Docker containers:

docker exec -it <container_name> cat /usr/local/tomcat/logs/catalina.out

In Kubernetes:

kubectl logs <pod_name> -c <container_name>

Using sidecar containers for log streaming is a common pattern in Kubernetes deployments to handle logging more efficiently. For complex deployments, consider using sidecar containers for log streaming:

apiVersion: v1
kind: Pod
metadata:
  name: tomcat-pod
spec:
  containers:
  - name: tomcat
    image: tomcat:latest
  - name: log-streamer
    image: log-streamer:latest
    volumeMounts:
    - name: logs
      mountPath: /usr/local/tomcat/logs
  volumes:
  - name: logs
    emptyDir: {}
  • Tomcat Container:
    • Uses the tomcat:latest image.
    • Mounts a volume at /usr/local/tomcat/logs to store log files.
  • Log Streamer Container:
    • Uses the log-streamer:latest image, which is responsible for streaming logs to an external system (like ELK stack, Fluentd, etc.).
    • Mounts the same volume at /usr/local/tomcat/logs to access the log files generated by the Tomcat container.
  • Shared Volume:
    • An emptyDir volume named logs is created. This volume is ephemeral and exists only as long as the Pod exists.
    • Both containers mount this volume to the same path, allowing the log-streamer to access and stream the logs produced by the Tomcat container.

Configuring Tomcat Logging

Tomcat's logging behavior is controlled by the logging.properties file, typically located in the conf directory of your Tomcat installation.

To customize logging:

  1. Open logging.properties in a text editor
  2. Modify log levels, handlers, and formatters as needed
  3. Save the file and restart Tomcat

Example configuration to enable DEBUG logging for a specific package:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = DEBUG
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler

To implement log rotation:

handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.level = INFO
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.suffix = .log
1catalina.org.apache.juli.FileHandler.timestamp = true
1catalina.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
1catalina.org.apache.juli.FileHandler.append = true
1catalina.org.apache.juli.FileHandler.limit = 10000000
1catalina.org.apache.juli.FileHandler.count = 10
1catalina.org.apache.juli.FileHandler.rotatable = true

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

2localhost.org.apache.juli.FileHandler.level = INFO
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
2localhost.org.apache.juli.FileHandler.suffix = .log
2localhost.org.apache.juli.FileHandler.timestamp = true
2localhost.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
2localhost.org.apache.juli.FileHandler.append = true
2localhost.org.apache.juli.FileHandler.limit = 10000000
2localhost.org.apache.juli.FileHandler.count = 10
2localhost.org.apache.juli.FileHandler.rotatable = true

Global Logging Configuration (1catalina): Typically used for logging all messages related to the Catalina engine, it is used to set up logging for the main Tomcat components.

Context-Specific Logging Configuration (2localhost): This can be used to set up logging specifically for the localhost context, allowing you to have a different logging configuration for web applications deployed under the localhost host.

Note: By default, the rotatable property is set to true, which means that log files will be rotated on a daily basis. If you explicitly want to set this property or ensure it's enabled, you can include it in your logging.properties configuration.

Advanced Logging Configuration

Integrate third-party logging frameworks:

  1. Add the desired framework (e.g., Log4j) to your classpath
  2. Configure a bridge between Tomcat and the framework
  3. Update your application code to use the new logging API

Example log4j2.xml configuration:

<Configuration status="WARN">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="10 MB"/>
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>

Appenders

  • RollingFile: An appender that writes log messages to a file and rolls the file over based on time and/or size constraints.
    • name="RollingFile": The name of the appender.
    • fileName="logs/app.log": The primary log file.
    • filePattern=logs/$${date}/app-%d{MM-dd-yyyy}-%i.log.gz: The pattern for rolled-over log files. It creates a new file for each month, and within each month, it creates a new file daily, appending an index (%i) if there are multiple log files for the same day. The logs are also compressed using gzip (.gz).

Policies

  • TimeBasedTriggeringPolicy: Rolls the file over at a regular interval based on time (e.g., daily).
  • SizeBasedTriggeringPolicy size="10 MB": Rolls the file over when it reaches 10 MB in size.

Loggers

  • Root logger: The main logger for the application.
    • level="info": Sets the logging level to INFO, meaning it will log messages at INFO level and higher (INFO, WARN, ERROR, FATAL).
    • AppenderRef ref="RollingFile": Associates the RollingFile appender with the root logger.

Analyzing and Monitoring Tomcat Logs

Efficient log analysis is crucial for maintaining application health. Use these techniques:

  • Grep for specific patterns: grep "ERROR" catalina.out
  • Tail logs in real-time: tail -f catalina.out
  • Use awk for complex parsing: awk '/ERROR/ {print $1, $2, $NF}' catalina.out

Common log patterns to watch for:

  • OutOfMemoryError: Indicates memory leaks or insufficient heap size
  • NullPointerException: Signals unhandled null values in your code
  • SocketTimeoutException: Suggests network or database connectivity issues

For centralized logging in distributed systems, consider tools like:

  • ELK Stack (Elasticsearch, Logstash, Kibana)
  • Graylog
  • Splunk

Troubleshooting Common Tomcat Issues Using Logs

Identify memory leaks:

  1. Look for messages about increasing heap usage
  2. Check for "GC overhead limit exceeded" errors
  3. Analyze heap dumps using tools like Eclipse Memory Analyzer

Debug application startup failures:

  1. Examine catalina.out for exceptions during startup
  2. Check for missing dependencies or incorrect configurations
  3. Verify database connection strings and resource availability

Trace request processing:

  1. Enable access logging in server.xml
  2. Analyze response times and HTTP status codes
  3. Correlate slow requests with application logs for deeper insights

Security-related log entries:

  • Failed login attempts
  • Unauthorized access to protected resources
  • Unusual traffic patterns or request rates

Best Practices for Tomcat Log Management

  1. Implement a log retention policy:
    • Define how long to keep logs based on compliance requirements
    • Use log rotation to manage file sizes and historical data
  2. Centralize logs for multi-instance deployments:
    • Use a centralized logging solution (e.g., ELK stack)
    • Implement log shipping from each Tomcat instance
  3. Use log analysis tools:
    • Set up alerts for critical errors or performance thresholds
    • Create dashboards for visualizing application health metrics
  4. Secure log files:
    • Restrict access to log directories
    • Encrypt sensitive log data
    • Implement audit trails for log access

By following these guidelines, you'll be well-equipped to harness the power of Tomcat logs for effective application monitoring and troubleshooting.

Send Tomcat Logs to SigNoz

SigNoz is an open-source application performance monitoring (APM) and observability platform. Integrating Tomcat logs with SigNoz can provide a unified view of your application's performance and logs. Here's how to send Tomcat logs to SigNoz:

  1. Install SigNoz: Follow the SigNoz installation guide to set up SigNoz in your environment.

    <GetStartedSigNoz />

  2. Configure Log4j2 for Tomcat: Create a log4j2.xml file in your Tomcat's conf directory:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="INFO">
      <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
          <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Http name="SigNoz" url="<http://localhost:8080/v1/logs>">
          <Property name="Content-Type" value="application/json"/>
          <JsonLayout complete="false" compact="true" eventEol="true">
            <KeyValuePair key="service.name" value="tomcat-app"/>
          </JsonLayout>
        </Http>
      </Appenders>
      <Loggers>
        <Root level="info">
          <AppenderRef ref="Console"/>
          <AppenderRef ref="SigNoz"/>
        </Root>
      </Loggers>
    </Configuration>
    
    

    Replace http://localhost:8080 with your SigNoz server address.

  3. Update Tomcat's logging.properties: Modify conf/logging.properties to use Log4j2:

    handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    .handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
    
    org.apache.juli.FileHandler.level = FINE
    org.apache.juli.FileHandler.directory = ${catalina.base}/logs
    org.apache.juli.FileHandler.prefix = catalina.
    
    java.util.logging.ConsoleHandler.level = FINE
    java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
    
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
    org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = org.apache.juli.FileHandler
    
    
  4. Add required dependencies: Place the following JARs in Tomcat's lib directory:

    • log4j-api-2.x.x.jar
    • log4j-core-2.x.x.jar
    • log4j-web-2.x.x.jar
    • log4j-jul-2.x.x.jar
  5. Configure Tomcat to use Log4j2: Add these system properties to catalina.sh (Unix) or catalina.bat (Windows):

    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"
    JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=conf/log4j2.xml"
    
    
  6. Restart Tomcat: Restart your Tomcat server to apply the changes.

  7. View logs in SigNoz: Access your SigNoz dashboard to view and analyze the Tomcat logs alongside other application metrics.

    Untitled
    View Logs in SigNoz

By integrating Tomcat logs with SigNoz, you gain:

  • Centralized log management
  • Correlation between logs and application performance metrics
  • Advanced querying and visualization capabilities
  • Real-time alerting based on log patterns or anomalies

This setup allows you to leverage SigNoz's powerful features for comprehensive application monitoring and troubleshooting, combining log analysis with performance metrics for a holistic view of your Tomcat-based applications.

Key Takeaways

Understanding and effectively managing Tomcat logs is crucial for maintaining healthy Java web applications. Here are the key points to remember:

  • Log Types: Tomcat generates various log files, including catalina.out, localhost.log, manager.log, and host-manager.log — each serving a specific purpose.
  • Log Locations: Tomcat logs are typically found in the logs directory of your Tomcat installation. The exact path varies based on your operating system and installation method.
  • Configuration: Use the logging.properties file to customize Tomcat's logging behavior, including log levels, handlers, and formatters.
  • Advanced Setups: For complex environments, consider integrating third-party logging frameworks like Log4j or using centralized logging solutions.
  • Containerized Environments: Access logs in Docker containers and Kubernetes pods using specific commands or by implementing sidecar containers for log streaming.
  • Log Analysis: Utilize tools like grep, awk, and sed for basic log analysis. For more advanced needs, consider ELK stack, Graylog, or SigNoz.
  • Troubleshooting: Logs are invaluable for identifying and resolving issues such as memory leaks, application startup failures, and performance bottlenecks.
  • Best Practices: Implement log rotation, centralize logs for multi-instance deployments, use analysis tools, and secure your log files.
  • Monitoring Integration: Consider integrating your Tomcat logs with APM tools like SigNoz for a comprehensive view of your application's health and performance.

By mastering these aspects of Tomcat logging, you'll be well-equipped to maintain, monitor, and troubleshoot your Java web applications effectively. Remember, logs are your first line of defense in ensuring application reliability and performance.

FAQs

How often should I rotate Tomcat log files?

Rotate logs daily or when they reach a specific size (e.g., 100MB) — whichever comes first. This balance ensures manageable file sizes and easy correlation with daily events.

Can I use Tomcat logs for application-level logging?

While possible, it's better to use a dedicated logging framework (e.g., Log4j, SLF4J) for application logging. This approach provides more flexibility and better separation of concerns.

What's the difference between catalina.out and localhost.log?

catalina.out contains Tomcat's stdout and stderr output, including system errors. localhost.log focuses on application-specific logs for the default host.

How can I reduce the size of Tomcat log files without losing important information?

  1. Adjust log levels to capture only necessary information
  2. Implement log rotation with compression
  3. Use a centralized logging system to offload logs regularly

Where can I find the Tomcat logs?

Tomcat logs are typically located in the logs directory within your Tomcat installation. The exact path depends on your operating system and installation method.

What are Tomcat access logs?

Tomcat access logs record incoming HTTP requests, including client IP, request method, URI, and response status. They're useful for tracking user activity and diagnosing issues.

Where are embedded Tomcat logs?

Embedded Tomcat logs are often found in the application's working directory or a specified log directory. Check your application's configuration for the exact location.

What is Tomcat Catalina log?

The Catalina log (usually catalina.out) is Tomcat's main log file. It contains startup messages, errors, and other important server events.

What is the default Tomcat log file?

The default main log file is catalina.out, which captures stdout and stderr output from the Tomcat server.

Can I delete Tomcat logs?

Yes, you can delete old Tomcat logs to free up disk space. However, implement a log rotation and retention policy to ensure you have access to recent logs for troubleshooting.

Resources

Was this page helpful?