Логгирование в Django (начальный обзор)

https://ru.opensuse.org/SDB:Systemd#systemd-journalctl:

Краткое описание файла настроек Logrotate

Описание того, каким образом Logrotate будет работать с тем или иным лог файлом находится в специальном конфигурационном файле. Как правило, они располагаются в директории /etc/logrotate.d/. Например, файл конфигурации для apache2 выглядит следующим образом:

$ more /etc/logrotate.d/apache2 /var/log/apache2/*.log { weekly # ротация раз в неделю. Возможные варианты daily, weekly, # monthly, size (например size=1M) missingok # отсутствие файла не является ошибкой rotate 52 # сохраняется последние 52 ротированных файла compress # сжимать ротируемый файл delaycompress # сжимать предыдущий файл при следующей ротации # (т.е. файл *.log.1 будет не сжат, а *.log.2 и далее сжатыми) notifempty # не обрабатывать пустые файлы create 640 root adm # сразу после ротации создать пустой файл с заданными правами и пользователем sharedscripts # крипты prerotate/postrotate будут выполнены только один раз # не зависимо от количества журналов, подходящих под заданный шаблон postrotate # скрипт будет выполнен сразу после ротации if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }

При этом, первая строка /var/log/apache2/*.log есть ничто иное, как шаблон обрабатываемых лог-файлов. Он означает, что указанная конфигурация ротации будет использоваться для всех файлов, находящихся в директории /var/log/apache2/ и имеющих расширение "log".

Допустимых директив в конфигурационном файле очень много (более 40). Подробнее о них можно узнать из man logrotate.

  • Директивы:
  • mail — указывает куда отсылать ротированный файл
  • mailfirst — отсылать первую ротированную комию; maillast — отсылать последнюю ротированную копию

postrotate reload rsyslog >/dev/null 2>&1 || true # for Debian invoke-rc.d rsyslog reload > /dev/null # for RHEL endscript

  • copytruncate — после создания копии, обрезать исходный файл журнала взамен перемещения старого файла журнала и создания нового. Это может найти применение в том случае, когда некоторой программе нельзя указать закрыть её журнал, и таким образом можно постоянно продолжать запись (добавление) в существующий файл журнала. Примите во внимание, что хотя между копированием файла и его обрезанием очень маленький промежуток времени, некоторая часть журналируемых данных может быть потеряна. При использовании этого параметра, не имеет силы директива create, так как старый файл журнала остаётся на своём месте.

Просмотр логов в Linux с помощью less.

При всей простоте и удобстве tail обладает одним существенным недостатком – он показывает только последние строки и вы не имеете возможности поглядеть, что происходило до этих записей или в определенный момент времени. Для таких ситуаций лучше подходит утилита less.

Откроем файл:

[[email protected] ~]# less /var/log/httpd/domains/

1 [hc@host~]# less /var/log/httpd/domains/

Как видите мы можем спокойно листать содержимое файла с помощью стрелок курсора и клавиш PgUp и PgDn. Запомните еще несколько полезных клавиш:q – выход;g – перейти в начало файла;G – перейти в конец файла;Ng – перейти на строку N (например, на 14 строку 14g);N% – перейти на позицию N% (например, 35%);F – перейти в режим отслеживания обновления файла, т.е. аналог tail -f;/pattern – прямой (вниз по файлу) поиск по образцу pattern;?pattern – обратный (вверх по файлу);n – следующее совпадение образца поиска;N – предыдущее совпадение; Выход из режима отслеживания Ctrl+C; Полный список всех остальных клавиш и режимов вы можете поглядеть самостоятельно – нажав h – помощь (очень советую нажать).

Читайте также:  Apple ProRAW: все особенности и нюансы формата

Теперь давайте посмотрим какие ключи можно передать less.

+F – cразу запустить less в режиме считывания хвоста:

[[email protected] ~]# less +F /var/log/httpd/domains/

1 [hc@host~]# less +F /var/log/httpd/domains/

-I ? игнорировать регистр при поиске;-N ? отображать номера строк;-S ? усекать длинные строки;

Давайте подытожим – для просмотра логов в Linux удобно пользоваться утилитами tail и less. Первая отлично подходит для быстрого просмотра концовок лог-файлов или для отслеживания изменений сразу в нескольких файлах. Вторая более функциональна и лучше приспособлена для вдумчивого анализа.

Настройка системы журналирования

Для управления журналированием существует два сервиса, или демона, klogd и syslogd. klogd имеет дело только с сообщениями ядра. syslogd имеет дело с другими системными сообщениями, например, касающимися приложений. Вы можете сконфигурировать оба эти сервиса, отредактировав файлы /etc/ и /etc/sysconfig/syslog. Описание процедуры настройки системы журналирования выходит за рамки этой статьи. Подробную информацию вы можете найти в разделе Resources в конце этой статьи. Вы можете также обратиться к странице man для /etc/

В сущности, каждое сообщение, выдаваемое программным обеспечением, предоставляет некую информацию для определения, откуда оно поступило и в чем его суть. Файл /etc/ позволяет установить, что нужно делать с сообщениями определенного типа. Вы можете помещать их в файл сообщений. Вы можете помещать их в файл настроек. Вы можете послать их на удаленный хост, где они будут обработаны в соответствии с конфигурацией его syslogd. Удаленное журналирование — замечательное средство обеспечения безопасности. Размещая журналы на удаленной системе, вы можете закрыть брешь в системе безопасности, заключающуюся в том, что злоумышленник может удалить следы своей деятельности в log-файлах.

Ниже приведены примеры настройки системы журналирования, взятые из man /etc/:# Kernel messages are first, stored in the kernel# file, critical messages and higher ones also go# to another host and to the console#kern.* /var/adm/ @ /dev/;kern.!err /var/adm/kernel-info

Первое правило направляет любое сообщение, имеющее отношение к ядру, в файл /var/adm/kernel.

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

Третье направляет эти сообщения на текущую консоль, так что человек, работающий на этом компьютере, тоже их получит.

Четвертая строка дает указание демону syslogd’ сохранить все сообщения ядра, которые приходят с приоритетами от info до warning в файл /var/adm/kernel-info. Все от err и выше исключается.

Возможность проведения таких настроек системы журналирования, как показано здесь, обеспечивает гибкость и управляемость всего Linux-окружения.

Конфигурирование журнала с помощью Webmin

Webmin имеет модуль для работы с log-файлами.

Показаны все сконфигурированные log-файлы. Щелкните по log-файлу для редактирования его конфигурации.

Или нажмите View для просмотра содержимого log-файла.

Журналирование в вашей жизни

В Linux log-файлы крайне необходимы для выявления и устранения неисправностей и для поддержки системы. Журналирование происходит в текстовые файлы, поэтому для их просмотра не требуются проприетарные инструменты. Кроме того, текстовые файлы легко можно использовать при создании скриптов и программ.

Для предотвращения чрезмерного роста размеров log-файлов и отделения текущей информации от более старых данных предусмотрена ротация журналов. Имеется возможность конфигурирования процесса ротации.

Читайте также:  Что делать после покупки VDS, VPS или сервера на Linux

Система журналирования легко конфигурируется. Журналы даже могут храниться на изолированной системе для обеспечения безопасности или с целью резервного копирования. Вы можете генерировать системные сообщения из ваших собственных скриптов или программ. Эти сообщения будут распознаны и обработаны демоном syslogd.

Поделиться:

Оставьте свой комментарий!

  • Комментарий в ВКонтакте
  • Комментарий в Facebook

Tags:

  • linux
  • журналы

Читайте далее:

  • Программное обеспечение для ОС Linux
  • BitDefender Linux Edition (Freeware)
< Предыдущая Следующая >

Подведем итоги

С этого момента вы должны уметь пользовать логгерами и выполнять их конфигурацию несколькими различными методами. Вы также получили все необходимые знания для модификации выдачу при помощи объекта Formatter. Модуль logging очень полезен в решении возникших проблем в работе вашего приложения. Постарайтесь провести больше времени за практической работой с данным модулем перед написанием большого приложения.

Подведем итоги

Vasile Buldumac

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленником, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: @

ОбразованиеUniversitatea Tehnică a Moldovei ()

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Почтовый сервер

Чтобы создать почтовый сервер на Линукс, у вас уже должен быть зарегистрирован домен. Также нужно иметь статический IP.

  • Установите компонент Postfix. Для этого наберите в консоли «sudo apt-get postfix».
  • Когда он загрузится, напишите команду «sudo /etc/initd/postfix start». Сервис начнёт работать.
  • В Postfix уже прописаны параметры, которые нужны для полноценной работы с протоколом SMTP. Но всё же не помешает небольшая настройка.
  • Откройте файл /etc/postfix/
  • Найдите в нём значение «mydomain =». После знака «=» напишите имя домена.
  • Потом отыщите «myhostname =». И введите имя машины.
  • Теперь почтовый сервер может отправлять письма другим компьютерам, которые находятся с ним в одной сети. Чтобы он мог посылать корреспонденцию и на другие домены в интернете, в файле «» найдите строчку «inet_interfaces =». Поставьте после неё слово «all».
  • В переменной «mynetworks =» пропишите диапазон адресов всех компьютеров вашей подсети (например, 127.0.0.0/8).

Не рекомендуется открывать доступ к серверу извне. Такие «публичные» ресурсы очень часто используются для рассылки спама. Из-за этого ваш домен может оказаться в чёрном списке у других почтовых сервисов.

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

Чтобы посмотреть логи ресурса, используйте команду «tail -f /var/log/mail/info». Чтобы получить от него сообщение, введите «mailq».

Настройка логгирования в Django

Мы можем изменить настройки логирование непосредственно в представление (view), сразу после импоритирования. По умолчанию Django использует формат dictConfig для настройки handlers, loggers, filters и formatters. Эти настройки задаются с помощью словаря LOGGING, который объединяется с конфигурацией ведения журнала Django по умолчанию. Выглядеть это будет следующим образом:

import logging ({ ‘version’: 1, ‘disable_existing_loggers’: False, ‘formatters’: { ‘console’: { ‘format’: ‘%(name)-12s %(levelname)-8s %(message)s’ }, ‘file’: { ‘format’: ‘%(asctime)s %(name)-12s %(levelname)-8s %(message)s’ } }, ‘handlers’: { ‘console’: { ‘class’: », ‘formatter’: ‘console’ }, ‘file’: { ‘level’: ‘DEBUG’, ‘class’: », ‘formatter’: ‘file’, ‘filename’: » } }, ‘loggers’: { »: { ‘level’: ‘DEBUG’, ‘handlers’: [‘console’, ‘file’] } } })

Читайте также:  Установка Linux — пошаговая инструкция на примере Ubuntu

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

LOGGING = { ‘version’: 1, ‘disable_existing_loggers’: False, ‘formatters’: { ‘console’: { ‘format’: ‘%(name)-12s %(levelname)-8s %(message)s’ }, ‘file’: { ‘format’: ‘%(asctime)s %(name)-12s %(levelname)-8s %(message)s’ } }, ‘handlers’: { ‘console’: { ‘class’: », ‘formatter’: ‘console’ }, ‘file’: { ‘level’: ‘DEBUG’, ‘class’: », ‘formatter’: ‘file’, ‘filename’: » } }, ‘loggers’: { »: { ‘level’: ‘DEBUG’, ‘handlers’: [‘console’, ‘file’] } } }

Рассмотрим это настройки более подробно.

version

Схема dictConfig не требует версии, но ее установка обеспечивает обратную совместимость. В настоящее время единственным допустимым значением здесь является 1.

disable_existing_loggers

Этот параметр отключает существующие логгеры. По умолчанию Django использует некоторые из своих собственных логеров. Эти логгеры связаны с Django ORM и другими внутренними частями Django. Значением по умолчанию является False, но не помешает указывать это явно. При установке этого значения в True нужно указать дополнительные логгеры . В противном случае сообщения могут быть потеряны.

formatters (форматы)

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

%(name)-12s %(levelname)-8s %(message)s

Вот что здесь используется:

  • %(name) – это имя пакета, которое выдает сообщение журнала
  • %(levelname) – степень важности сообщения (ERROR, WARNING, INFO, и т.д.)
  • %(message) – само сообщение

-12s и -8s управляют интервалом между различными спецификациями формата. Сообщения в этом формате будет выглядеть следующим образом:

ERROR Test!!

Вы можете заметить, что formatter в file содержит дополнительный спецификатор %(asctime). Это добавляет временную метку к каждому сообщению, отправляемому через обработчик file. В качестве примера, сообщение из нашего определенного будет выглядеть так:

2020-11-29 14:36:58,739 ERROR Test!!

handlers (обработчики)

Этот раздел определяет, как обрабатывать сообщения журнала. Мы можем отправлять сообщения на консоль, файлы или даже в сокеты! Все обработчики по умолчанию описаны в документации по Python здесь. Эта конфигурация определяет отдельные обработчики: один для сообщений консоли и другой для сообщений, отправляемых в файл. Кроме того, для обработчика file мы указываем класс обработчика, имя файла и log level. В этом обработчике также указано, какой formatter нужно использовать.

loggers (логгеры)

В этом разделе мы связываем все это вместе и определяем наши логгеры, включая способы обработки сообщений корневого логгера — root logger (представленного пустой строкой). Мы также устанавливаем уровень ведения журнала logging level — DEBUG и определяем два обработчика, один для консоли и один для файла.

В нашем примере мы не использовали один параметр который необходимо упомянуть здесь это filters

filters (фильтры)

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

Фильтры также могу изменить сообщение. Например, вы можете создать фильтр, который изменяет уровень логгирования определенных сообщения с ERROR на WARNING.

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

Мы рассмотрим использование фильтров в разделе настройки почтовых сообщений

Давайте сейчас обновим конфигурацию и посмотрим что получилось.