Tomcat логи ошибок

Apache Tomcat is the Java web server that implements many Java features like web site APIs, Java server pages, Java Servlets, etc. It’s an open-source software widely used in the industry. Tomcat sits on top of your application and is the entry point for reaching your application code. It is crucial to monitor its performance and make sure everything works, get notified when unexpected errors occur, and take action in real-time. Like other web servers, it also produces a lot of logs that are instrumental in troubleshooting.

The Apache Tomcat logs are information about your resources—what they are, who is accessing which ones, and at what time. In this article, I’ll show you how to look at Tomcat logs, their different types, log locations, and log rotation.

What Are Tomcat Logs?

Tomcat logs are the files that keeps information related to web server issues and server tasks in proper files in given locations. It’s important to understand logging on the Tomcat server because this tells you if there’s any issue with the server and if so, whether it’s functional or performance related. There can be multiple types of logs segregated into different file locations. Knowing these locations will help you debug issues faster.

Tomcat global logs, called Catalina logs, are some of the most important log types present. There are others too, like application logs and localhost logs. I’ll be discussing all of these and how they can help you. But before that, let’s look at the configuration needed to enable logging in Tomcat.

To collect Tomcat logs, you first need to enable logging. Logging in Tomcat is handled by the Java Utility Logging Implementation, also known as JULI. JULI is enabled by default, and you can perform this configuration using the logging configuration file option -Djava.util.logging.config.file=”logging.properties”:

  • Globally: ${catalina.base}/conf/logging.properties. This file is specified by the java.util.logging.config.file system property. If you don’t configure it, the default file will be ${java.home}/lib/logging.properties in the JRE.
  • In the web application: Use WEB-INF/classes/logging.properties.

If you don’t want to use JULI, there are other logging frameworks like log4j, log4j2, or Logback. Let’s take log4j as example.

To configure log4j for logging, just create a log4j.properties file and use log4j.jar. You can put the log4j.properties file into the $CATALINA_BASE/lib folder.

There are multiple options provided to configure the log4j logs. A few of the important ones are log4j.appender.CATALINA.File, which configures the location of the file; log4j.appender.CATALINA.Encoding can configure the encoding; and the UTF-8.log4j.appender.LOCALHOST.DatePattern option, which helps in configuring the log rotation based on date pattern.

For configuring Manager, Localhost, Host-Manager, and Catalina logs, the configuration parameters start with prefixes: log4j.appender.MANAGER for Manager, log4j.appender.HOST-MANAGER for Host Manager, log4j.appender.LOCALHOST for localhost, and log4j.appender.CATALINA for Catalina. You can see the exact instructions in the Tomcat documentation.

Tomcat Log Levels

As with any other logging framework, JULI also has log levels that define the severity of the log and the information it contains. JULI log levels consist of:

  1. SEVERE: Information pertaining to a serious problem
  2. WARNING: Could be an issue in the future
  3. INFO: Informational messages
  4. CONFIG: Configuration information (listed when log level is set to config)
  5. FINE: Trace logs
  6. FINER: More-detailed trace logs
  7. FINEST: Highest-detailed trace logs

These log levels are sorted in the order of the details that they feature. So, SEVERE has only very important information, while FINEST presents you with the most information. Please note that having a lot of information in your logging can have a performance impact on your disk’s I/O and increase your system’s load average.

Log levels can be set for different handlers from the logging.properties file found in $CATALINA_BASE/conf:

For example, set the com.xyz.foo logger to only log SEVERE # messages:

org.apache.catalina.startup.ContextConfig.level = SEVERE 
org.apache.catalina.startup.HostConfig.level = SEVERE 
org.apache.catalina.session.ManagerBase.level = SEVERE

Tomcat Logs Location

The location of your Tomcat logs can differ depending on your operating system or containerzied platform. Below are a few of those default locations:

  • Linux: The log will be present by default at /var/log/tomcat/*.log. In some cases, you will also find it at /opt/tomcat/logs.
  • Windows: In Windows, the logs will be present at the location where your software is, something like this: C:program filesapache software foundationapache-tomcat{ver}logscatalina.out
  • Docker: By default, the logs will be printed to STDOUT and STDERR so that the logging agents on the nodes can get these logs and push them to a centralized place.
  • Kubernetes: You can configure your logging agent to read the logs from the standard output and standard error from the containers.

You can easily change where your Tomcat logs are stored using the CATALINA_OUT variable.

Tomcat Log File Types

There are multiple log files that Tomcat produces for its different components. The most important are all the Catalina logs since you can easily find most information in these files.

Catalina Logs

Tomcat Catalina produces two types of Catalina log files: catalina.log and catalina.out.

Catalina.log

This is the global log file used to save information like server admin operations, for example, server stop, start, restart, deployment of a new application, and failure of a subsystem. If you want to make changes to this log format, do so in the java.util.logging.SimpleFormatter.format variable. You can configure the location of the file in the $CATALINA_OUT parameter, or it will be present by default at CATALINA_HOME/logs.

Catalina.out

The servlet and error logs will be written in the catalina.out log file. This file can also contain thread dumps and uncaught exceptions.

You can make changes to the format of catalina.out in the java.util.logging.SimpleFormatter.format variable. The location of this file is defined in the $CATALINA_OUT parameter or is present by default at CATALINA_HOME/logs.

Localhost Log

These are the logs that track the activity log of your web application, e.g., the transactions between the application server and clients. These log files are present in the Tomcat home directory inside the logs folder.

Localhost Access Log

There can be cases where the application server has to make a call to another service, i.e., outbound HTTP requests. The localhost access log keeps track of all these requests. Localhost access logs are also found in the same location as the localhost logs inside the log directory of the Tomcat home directory.

Access Log

Tomcat access logs can give you information about who has access to your application, what resources were accessed, the IP, queries, date, etc. These are some of the most important logs for traffic analysis and can be configured via the server.xml file inside the conf directory in the Tomcat home directory.

Manager Log

These logs keep information on all the activities performed by the Tomcat manager, including lifecycle management, application deployment, etc. These logs can be configured in the logging.properties configuration file present at TOMCAT_HOME/conf.

Log Rotation

There can be lots of logs produced by Tomcat. You need a way to archive the older ones so that your disk doesn’ get filled up. To achieve this, you have to hand over the Tomcat log rotation to the default log rotate engine in the operating system. For example, in the case of Linux, you can do this easily using logrotate. Simply create a file using the command:

touch /etc/logrotate.d/tomcat

And then put the following into the file; this can be tweaked per your needs for log rotation:

/{PATH_TO_CATALINA_FILE}/catalina*.* {
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 100M
}

This configuration will start the log rotation for you. You can also write similar files if you want to implement log rotation separately for different types of Tomcat logs.

How to View Tomcat Logs

There is no utility to look at Tomcat logs, so you have to rely on your operating system tools. For example, in the case of Linux, you can use less or tail commands to look at your logs:

less filename.log
tail -f filename.log

Given that you generally have a lot of machines running as Tomcat servers, it’s a very tricky task to run these commands on all those machines and get the logs. You need to have a place where you can push these logs and query on top of it. This is centralized logging, which you need when you have a lot of machines and it is humanly impossible to look at all the logs.

How to Disable Tomcat Logging

Logging can be costly for disk IOPS if we don’t do it properly, so you may want to disable the logging of Tomcat in some cases. To do this, you’ll need to make changes in the logging.properties file. To do that, comment the block below in the logging.properties file:

handlers = 1catalina.org.apache.juli.AsyncFileHandler,
2localhost.org.apache.juli.AsyncFileHandler…

To disable the access log, you have to remove the following block from the server.xml file:

<Valve className="org.apache.catalina.valves.AccessLogValve"
 directory="logs" prefix="localhost_access_log" suffix=".txt"
 pattern="%h %l %u %t "%r" %s %b" />

Apache Tomcat Log Analysis and Monitoring with Sematext

Sematext Logs is a log management solution that can get all your distributed logs for Apache Tomcat servers in one place. Sematext collects the logs from your Tomcat servers by installing a small agent on the host machine. It then starts collecting the data and sends it to Sematext collector servers, where the data will be available for you to view, analyze, or create dashboards from. Sematext has advanced features like auto-discovery, out-of-the-box dashboarding, alerting, anomaly detection, and communication support for different channels.

In addition, Sematext Logs is part of the Sematext Cloud observability solution, which includes a monitoring solution that can capture Tomcat metrics. When correlated with logs, these metrics present great value, enabling you to debug issues faster than before. For example, if you see any 5xx or 4xx issues, and there are logs for the same, it becomes easy to see why these errors are occurring.

Conclusion

When you’re running any application with Tomcat, it’s good to have visibility into what Tomcat and its different components are actually doing. To do this, you need access to logs and a way to look at them. Logs present you with information like if the servers are restarted, if there was any error, etc. You also want to have visibility on the type of traffic coming in and throughput.

Sematext provides a platform to achieve centralized logging and analysis to easily keep an eye on your application. With its advanced features like dashboarding, alerting, and anomaly detection, it becomes simple to monitor your Tomcat infrastructure.

Watch the video below to learn more about Sematext Logs or start a 14-day free trial to see how it can help your log management for Apache Tomcat web servers.

Author Bio

Gaurav Yadav
Gaurav has been involved with systems and infrastructure for almost 6 years now. He has expertise in designing underlying infrastructure and observability for large-scale software. He has worked on Docker, Kubernetes, Prometheus, Mesos, Marathon, Redis, Chef, and many more infrastructure tools. He is currently working on Kubernetes operators for running and monitoring stateful services on Kubernetes. He also likes to write about and guide people in DevOps and SRE space through his initiatives Learnsteps and Letusdevops.

Start Free Trial


How do I check the container log of tomcat?

I get this error from the catalina.out log:

SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file

But where can I find the «appropriate container log» that this log is referring to?

Thanks in advance.

kc2001's user avatar

kc2001

5,0384 gold badges50 silver badges90 bronze badges

asked Apr 14, 2016 at 8:34

Ben's user avatar

You’ll find the referenced log file in the same directory containing the log referencing the other log file. With a default installation of Tomcat, the directory is $CATALINA_HOME/logs. The log file containing the information referenced will usually be the one named with the hostname on which Tomcat is running. On a simple server (e.g. development environment) this is localhost.<datestamp>.log. The additional error information can be found in this log file at the same timestamp as the noted reference in the referring log file.

answered Jul 6, 2017 at 12:47

dan's user avatar

dandan

7229 silver badges14 bronze badges

I bumped into the same issue while working on a web application.

Tomcat logs did not show full stack trace and application has more than one listeners, it may get challenging to figure out the issue.
After some browsing, below is what helped me find the error.

Create a file logging.properties with the following content, place it inside Apache-tomcatwebappsMyAppWEB-INFclasses and restart the Apache Tomcat server.

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

answered Feb 20, 2019 at 10:20

Nagaraja JB's user avatar

Nagaraja JBNagaraja JB

7298 silver badges17 bronze badges

2

I installed Tomcat6 on a Ubuntu 9.04 server using apt-get install tomcat6. I uploaded a WAR using the manager interface and tried to start the application but get a pretty generic error on the Web interface saying it couldn’t be started.

I am trying to find the logs to determine why my war won’t start (I suspect low memory as i’m on a small VPS) but I don’t know where they are.

/var/lib/tomcat6/logs is empty. My Tomcat splash page reliably informs me of the following;

Tomcat is installed with CATALINA_HOME in /usr/share/tomcat6 
CATALINA_BASE in /var/lib/tomcat6, 
following the rules from /usr/share/doc/tomcat6-common/RUNNING.txt.gz.

UPDATE

I tried running;

$ ps -ax 
/usr/bin/jsvc -user tomcat6 -cp /usr/share/java/commons-daemon.jar:/usr/share/tomcat6/bin/bootstrap.jar -outfile SYSLOG -errfile SYSLOG -pidfile /var/run/tomcat6.pid

But there is nothing in /var/log/syslog

Also runing

$ losof -p PID

didn’t show any log files…

$  for PID in $(pgrep jsvc);do sudo ls -l /proc/$PID/fd|grep ' 1 -> ';done
l-wx------ 1 root 500 64 2010-03-30 13:29 1 -> pipe:[301470406]
lrwx------ 1 root 500 64 2010-03-30 13:29 1 -> /dev/null
l-wx------ 1 root root 64 2010-03-30 13:29 1 -> pipe:[301470406]

Thanks,

Gav

Corey S.'s user avatar

Corey S.

2,4671 gold badge19 silver badges23 bronze badges

asked Mar 30, 2010 at 12:20

gav's user avatar

Very late to this discussion, but it appears that the 03catalina.policy file in both tomcat5.5 & tomcat6 doesn’t actually permit writing to logfiles.

The simplest solution is to change the JULI permissions to:

// These permissions apply to JULI
grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
    permission java.security.AllPermission;
};

Obviously, there may be security issues I’m not aware of, but I really can’t be bothered to dig deeper — I’ve spent too long on this myself.

answered Jul 24, 2012 at 19:18

Auspex's user avatar

AuspexAuspex

2433 silver badges8 bronze badges

1

A neat trick is to run the command «lsof -p PID» where PID is the process id of your tomcat server. This command will give you a list of all files opened by the process, including the log file. See Wikipedia page.

Basil Bourque's user avatar

answered Mar 30, 2010 at 13:23

dogbane's user avatar

dogbanedogbane

9545 silver badges8 bronze badges

3

By default check

/var/log/tomcat6/catalina.out 

or something like that

and check logging properties in

/usr/share/tomcat6/conf/logging.properties

usually /usr/share/tomcat6/conf/ is symbolic link to /etc/tomcat6/

answered Mar 30, 2010 at 13:10

Lanselot's user avatar

LanselotLanselot

1,2189 silver badges5 bronze badges

1

They should be at CATALINA_HOME/logs

I’ve seen it most often at /opt/tomcat/logs, but in your case it might be /usr/share/logs

answered Mar 30, 2010 at 13:35

Bozho's user avatar

BozhoBozho

8091 gold badge7 silver badges13 bronze badges

By default Tomcat logs are in /var/log/tomcat? and /var/lib/tomcat7/logs usually points to there.

As root, you may check them by:

tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out

If you still have any issues, try finding them via:

sudo lsof | grep -E "java.*(out|txt|log)$"

answered Apr 10, 2015 at 15:25

kenorb's user avatar

kenorbkenorb

6,3632 gold badges44 silver badges54 bronze badges

we can find logs like below for Windows.
C:Program FilesApache Software FoundationTomcat 9.0logs

also refer C:Program FilesApache Software FoundationTomcat 9.0conflogging-properties.

answered Jun 20, 2018 at 0:08

Sudheer N's user avatar

3

  • Access logs are handled separately using AccessLogValve in server.xml. They will rotate on a daily basis by default, but are never compressed or cleaned up. You’ll need to use logrotate or a cron job to clean them up:
    #Ansible: Compress tomcat access logs
    @daily find /var/log/tomcat/*.txt -type f -mtime +0 -exec gzip {} ; 2> /dev/null
    #Ansible: Delete tomcat access logs
    @daily find /var/log/tomcat/*.txt.gz -type f -mtime +30 -exec rm {} ; 2> /dev/null
    
  • В настоящее время цикл разработки программного обеспечения идет огромными темпами. Все организации имеют базы кодов, содержащие огромное количество кодов, состоящих из связанных между собой веб-страниц. Есть много обстоятельств, когда система дает сбой или ведет себя неожиданно.

    Чтобы проанализировать и отладить проблему, разработчики и системные администраторы просматривают файлы журнала, чтобы найти проблемы системы. На самом деле, когда система не работает, файлы журналов часто используются в качестве основного источника информации.

    В каждой системе системные администраторы поддерживают все действия, связанные с запросами, полученными от различных пользователей, и сохраняют их в файле, который называется файлами журнала.

    Для отладки системы мы можем обращаться к отдельным файлам журнала, чтобы получить представление о системе и перемещаться по различным временным меткам, чтобы узнать состояние системы.

    В этой статье мы рассмотрим особенности этих журналов ниже: мы рассмотрим, что хранится в журналах доступа Apache, где их найти и как просматривать журналы доступа Apache Tomcat. Это заставляет системных администраторов отслеживать всю информацию и действия, происходящие в их системе.

    Журналы доступа Apache — это один из видов файлов журналов, создаваемых HTTP-сервером Apache, как описано выше. Этот файл журнала отвечает за сохранение информации обо всех запросах, обрабатываемых сервером Apache Tomcat.

    В результате, если кто-то посещает страницу вашего сайта, файл журнала доступа будет содержать информацию об этом.

    Это знание полезно в нескольких ситуациях: если конкретный запрос не выполняется для каждого человека, пытающегося получить доступ к веб-странице, или в ситуации, когда возникает задержка в генерации ответа, мы можем пройти через сценарии SQL и оптимизировать их.

    Если одна из страниц сайта является особенно распространенной, агрегирование данных из журналов доступа может выявить запрашиваемые ресурсы, что позволит компаниям повысить свою популярность, предлагая более релевантные материалы.

    Как просмотреть журналы доступа Apache Tomcat?

    Расположение журналов определяется операционной системой, в которой HTTP-сервер Apache настроен для выполнения программы. Дистрибутивы Linux запускают большую часть экземпляров HTTP-сервера Apache. Итак, в этой статье мы сконцентрируемся на том, где найти и просмотреть журналы доступа Apache Tomcat на машине Linux.

    В случае ядра/операционной системы Ubuntu и Linux эти записи журнала можно найти в следующем месте:

    /var/log/apache2/access.log

    Некоторые дистрибутивы Linux могут иметь разные местоположения по умолчанию, но в большинстве случаев вам не придется далеко ходить. На директиву CustomLog можно ссылаться и обновлять ее на сервере Tomcat Apache.

    Директива CustomLog также берет на себя ответственность за сохранение места, где он хранится, и указывает формат, в котором он должен быть сохранен.

    Извлечение информации из журналов доступа Apache

    Теперь мы опишем, как просматривать файлы журнала доступа и интерпретировать данные из них. Извлечение информации может помочь ИТ-специалистам и командам разработчиков использовать ее.

    Чтение журналов доступа Apache

    Чтобы разобраться в журналах доступа Apache, аналитик должен сначала рассмотреть формат, в котором хранятся журналы.

    Как было сказано ранее, формат и место для доступа к журналам указываются в каталоге CustomLog. Ниже мы рассмотрим два распространенных формата журналов, которые широко используются для журналов доступа Apache.

    Общий формат журнала (CLF)

    CLF — это формат структурированного текстового файла для создания файлов журнала сервера, которые используются различными серверами веб-приложений. Популярный формат журнала можно использовать с HTTP-сервером Apache для создания журналов доступа, которые легко читать разработчикам и администраторам.

    Некоторые системы анализа журналов могут легко использовать файлы журналов в формате CLF. Это структурированный формат, используемый многими веб-серверами. Ниже приведен тип записи журнала доступа, записанной в CLF:

    127.0.0.1 - sccott [10/Nov/2020:13:55:35 -0700] "GET /server-status HTTP/1.1" 200 2326
    

    Дефис: дефисы идентифицируют клиента во втором поле внутри файла журнала.

    127.0.0.1: Client’s IP address.

    «GET/server-status HTTP/1.1» — ресурс и тип ресурса, запрашиваемые пользователем.

    200 - HTTP OK-response (status-code);
    
    2326 - Response of HTTP request object's size

    Комбинированный формат журнала (CLF)

    CLF — еще один распространенный формат журналов доступа Apache. Этот формат почти такой же, как и в популярном формате журнала, но включает в себя еще несколько полей, чтобы предоставить более подробную информацию для отладки и подробного анализа. Ниже приведен тип записи журнала доступа, записанной в CLF:

    27.0.0.1 - sccott [10/Dec/2019:13:55:36 -0700] "GET /server-status HTTP/1.1" 200 2326 "http://localhost/" "Mozilla/5.1 (Win NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

    Поскольку видно, что начальные семь полей являются общими для описанного выше формата, больше полей в формате следующие:

    "http://localhost/"

    Это показывает адрес клиентской системы.

    "Mozilla/5.1 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

    User-Agent определяет информацию о браузере, используемом клиентом для доступа к ресурсу.

    Директива CustomLog

    Ранее мы заявляли, что директива CustomLog в файле конфигурации HTTP-сервера Apache используется для настройки журналов доступа Apache. Здесь мы можем посмотреть на пример конфигурации журналов, чтобы увидеть, насколько гибкими являются директивы пользовательских журналов:

    LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
    
    CustomLog /var/log/apache2/access.log combined

    Выше мы использовали директиву Log Format для определения комбинированного LF, а директива CustomLog для определения местоположения, которое он хранит, вместе с ним определяет формат (combined) для журнала доступа, в котором он должен храниться.

    Как видите, изменение местоположения или формата журнала доступа — простая процедура. Кроме того, использование директивы CustomLog дает нам несколько других преимуществ, о которых мы поговорим позже.

    Журналы множественного доступа (MAL)

    Нет никаких ограничений, которые мешали бы вам настроить MAL для вашего сервера Apache Tomcat. Таким образом, процесс, которому обычно следуют, очень прост, поскольку вам нужно создать больше директив Custom Logs для создания вашего персонализированного файла журнала:

    LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
    
    LogFormat "%{User-agent}i" agent
    
    CustomLog /var/log/apache2/access.log combined
    
    CustomLog /var/log/apache2/agent_access.log agent

    Условные журналы

    Также весьма вероятно, что запись в журналы доступа будет выполняться на условной основе. Это полезно для многих целей, например для исключения записей, относящихся к отдельным клиентам. Установка всех переменных среды и обращение к ним с ключевым словом «env» обычно зависит от того, как это достигается.

    Вращение логов и логи piped

    Файлы журнала, как и все остальное на компьютере, занимают место. А файлы журналов, такие как журналы доступа, могут быстро развиваться на загруженном сервере Tomcat. Следовательно, важно иметь протоколы для регулярной передачи или удаления старых файлов журналов. К счастью, HTTP-сервер Apache может сделать это с помощью плавных перезапусков и конвейерных процедур журналирования.

    Перезапуск сервера Apache Tomcat работает хорошо, потому что он перезапускается без потери клиентских подключений.

    Этот вид перезапуска заставляет Apache открываться и перезаписывать новые файлы журналов, не прерывая работу клиентов, разрешая обработку для сжатия или удаления ранее использованных файлов журналов для сохранения новых.

    С другой стороны, протоколируемые процессы Pipe разрешают ротацию деталей журнала, не требуя повторного перезапуска сервера; например, HTTP-сервер Tomcat Apache включает программу под названием rotate-logs.

    Вместо записи на диск в это приложение можно передать записи журнала доступа. Программное обеспечение rotate-logs позволяет вращать журналы в зависимости от времени или расстояния условно.

    Заключение

    Мы упомянули полную информацию о просмотре журналов доступа Apache Tomcat и извлечении данных из файлов журналов различных форматов. Разработчики и системные администраторы должны знать, как просматривать файлы журналов и получать навыки отладки, чтобы обеспечить их бесперебойную работу.

    Таким образом, доступ к журналу Apache — это один из способов глубже погрузиться в систему с помощью сервера tomcat для отладки системы, перехода к любой временной метке и проверки состояния системы в соответствии с требованиями.

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    Понравилась статья? Поделить с друзьями:
  • Tomb raider системная ошибка
  • Tomb raider ошибка steam api
  • Tomb raider ошибка out of memory
  • Tomb raider ошибка appcrash
  • Tomb raider выдает ошибку при установке