Рубрики
Без рубрики

Быстро Начните Работу С Журналированием Java

Вы уже видели, как как можно быстрее приступить к ведению журнала на C#.   Но что, если ты мо… С тегом logging, java.

Вы уже видели, как начать работу с ведением журнала C# как можно быстрее. Но что, если ты больше похож на парня или девушку с Java? Что ж, тогда мы вас тоже поддержим: сегодняшний пост поможет вам ускорить ведение журнала с использованием старшего двоюродного брата C#, Java.

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

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

Самое Простое Из Возможных Ведение Журнала Java

Для этой простой демонстрации я собираюсь использовать бесплатную версию сообщества IntelliJ IDEA . Я также предполагаю, что на вашем компьютере установлен Java JDK .

Сначала откройте IntelliJ IDEA и нажмите “Создать новый проект”.:

На следующем экране выберите “Java” в качестве типа проекта на левой панели. Вам также нужно будет указать путь к JDK, если вы еще этого не сделали.

Третий шаг— отметьте опцию “Создать проект из шаблона”, а затем выберите “Приложение командной строки”:

Я назвал свой проект “Демонстрация ведения журнала Java”, как вы можете видеть на изображении ниже.

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

package com.company;

public class Main {

    public static void main(String[] args) {
    // write your code here
    }
}

Давайте приступим к работе. Замените комментарий “//напишите свой код здесь” следующей строкой:

System.out.println("Hello there!");

Теперь у вас есть приложение, которое отображает дружеское приветствие.

Далее, давайте запустим наше приложение. Перейдите в Выполнить > Запустите "Main" или используйте ярлык Запустите “Main” или используйте ярлык Shift Запустите "Main" или используйте комбинацию клавиш Shift + F10 Запустите “Main”

Запустите “Main” || или используйте ярлык ||Shift || +||F10 || (Windows и Linux) или ||Control +||R|| на Mac. Если все прошло хорошо, вы должны увидеть что-то вроде этого:

Запустите “Main” || или используйте ярлык ||Shift || +||F10 || (Windows и Linux) или ||Control +||R|| на Mac. Если все прошло хорошо, вы должны увидеть что-то вроде этого: Красиво. Запустите “Main” || или используйте ярлык ||Shift || +||F10 || (Windows и Linux) или ||Control +||R|| на Mac. Если все прошло хорошо, вы должны увидеть что-то вроде этого: Красиво. Но давайте предположим, что требования к нашему маленькому приложению изменились, как, кажется, всегда. Запустите “Main” || или используйте ярлык ||Shift || +||F10 || (Windows и Linux) или ||Control +||R|| на Mac. Если все прошло хорошо, вы должны увидеть что-то вроде этого: Красиво. Но давайте предположим, что требования к нашему маленькому приложению изменились, как, кажется, всегда. Теперь нам нужно, чтобы наше приложение не только отображало сообщение, но и регистрировало его где-нибудь. Запустите “Main” || или используйте ярлык ||Shift || +||F10 || (Windows и Linux) или ||Control +||R|| на Mac. Если все прошло хорошо, вы должны увидеть что-то вроде этого: Красиво. Но давайте предположим, что требования к нашему маленькому приложению изменились, как, кажется, всегда. Теперь нам нужно, чтобы наше приложение не только отображало сообщение, но и регистрировало его где-нибудь. Как это сделать?

Запустите “Main” или используйте ярлык Shift

public static void main(String[] args) throws IOException {
    String message = "Hello there!";
    System.out.println(message);
    Files.write(Paths.get("log.txt"), message.getBytes());
}

Обратите внимание на изменения. Мы добавили новую переменную ( сообщение ) для хранения текста приветствия. Мы добавили новую переменную (

Нам также пришлось добавить объявление throw в наш метод, так как последняя строка может вызвать исключение IOException . Кроме того, мы добавили несколько новых деклараций об импорте. Весь код теперь выглядит так:

package com.company;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {

    public static void main(String[] args) throws IOException {
        String message = "Hello there!";
        System.out.println(message);
        Files.write(Paths.get("log.txt"), message.getBytes());
    }
}

Когда вы снова запустите приложение, оно должно вести себя так же, как и раньше. Но последняя добавленная строка создаст для вас файл журнала. Он будет расположен в папке вашего проекта:

В этом-то все и дело. Вы только что написали свой первый регистратор Java! И с этим первым, маленьким шагом вы готовы попробовать более крупные.

Что Такое Ведение Журнала Приложений?

Сначала о главном. Давайте вкратце определим, что такое ведение журнала приложений.

Согласно Википедия ,

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

Немного расплывчато, не так ли? Я склонен предпочитать определение, которое мы имеем в нашем сообщении о регистрации C# :

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

Убрав что с дороги, давайте перейдем к почему ведения журнала.

Какова мотивация для ведения журнала?

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

Ну, по той же причине, по которой мы записываем что-либо на постоянный носитель: чтобы мы могли вернуться к этому позже. Тогда возникает вопрос: “Почему вы хотите сделать это с событиями, которые произошли при выполнении приложения?”

Все это сводится к природе самого программного обеспечения.

Часть программного обеспечения в производстве – это очень сложная вещь, чаще всего работающая в совершенно неконтролируемой среде.

Откуда ты знаешь, что это сработает? И когда что-то идет не так, как вы можете знать, что именно сошло с рельсов?

Вы всегда можете скрестить пальцы и надеяться, но, как говорится, надежда – это не стратегия. Ведение журнала – это, насквозь!

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

Развивая Наш Подход: Что Мы Должны Запечатлеть? И Куда?

Возможность провести расследование по факту вашего приложения звучит как большое преимущество – и, действительно, это так. Однако наш скромный блоггер не может предоставить нам это преимущество, поскольку все, что он может сделать, это записать текст в файл.

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

Так как же нам это сделать?

Ключевым моментом для понимания является природа записи в журнале.

Кое-что из этого знакомо , но я собираюсь резюмировать здесь для полноты картины. Подумайте о записи в журнале как о событии . Что-то, представляющее интерес для вашего приложения, произошло в данный момент времени. Таким образом, значение вашей записи в журнале зависит от данных, которые вы собираете о событии.

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

  1. Метка времени. Когда именно произошло это событие? (Вы захотите записать время в формате UTC и использовать стандартный формат, такой как ISO-8601 , на случай, если вы регистрируетесь в файле.)
  2. Контекст, который дает читателю понять, о чем эта запись. Простая запись “Привет, пользователь!” может сбить с толку недели или месяцы спустя. Лучшее сообщение может гласить: “Записанное приветствие пользователя “Привет, пользователь!””
  3. Теги и/или категории для каждой записи, чтобы включить последующий поиск и классификацию.
  4. Уровни журнала, такие как “ошибка”, “предупреждение” или “информация”, которые обеспечивают еще большую фильтрацию и контекст.

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

Войдите в структуру ведения журнала Java

Пора возвращаться к нашей демонстрации. Вот в чем дело: он был разработан, чтобы дать вам быстрый старт в мире ведения журналов Java. Но теперь вы готовы взглянуть на это более критически, так что давайте сделаем именно это.

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

  1. Во-первых, код всегда перезаписывает файл журнала. Стратегия ведения журнала, которая позволяет вам видеть только последнее событие, не очень полезна, не так ли?
  2. И поскольку мы говорим о перезаписи файла, вероятно, не помешало бы подумать о разрешениях доступа к файлам, о том, как справляться с параллельным доступом и тому подобными вещами.
  3. Наконец, похоже, что очень много работы приходится писать шаблонный код в каждом вызове для ведения журнала, чтобы получить уровни журнала, метки времени и все то, о чем я упоминал в предыдущем разделе.

Я мог бы продолжать и продолжать, но у вас есть картина: разработка надежного подхода к ведению журнала Java требует много размышлений. Но у меня есть хорошие новости. Как выясняется, люди уже решили эти проблемы. Мало того, они предоставляют вам свои решения, готовые к использованию и часто бесплатно , в виде структуры ведения журнала .

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

Установка структуры ведения журнала

Первое, что мы собираемся сделать, это вернуться к нашей кодовой базе и удалить ту строку, которая записывается в файл. Затем мы можем приступить к установке платформы ведения журнала под названием log4j . Это только один из возможных вариантов, и я действительно призываю вас попробовать альтернативные варианты позже. Но поскольку это краткое руководство, имеет смысл использовать log4j, поскольку это широко используемая платформа.

В окнах инструментов Проект щелкните правой кнопкой мыши модуль “Демонстрация ведения журнала Java”, а затем “Добавить поддержку платформы…”:

Теперь выберите “Maven” и нажмите “ОК”.:

После того, как вы это сделаете, среда IDE создаст pom.xml файл для вас и откройте его для редактирования:

Теперь скопируйте и вставьте следующий XML-текст в свой файл:


      
        org.apache.logging.log4j
        log4j-api
        2.10.0
      
      
        org.apache.logging.log4j
        log4j-core
        2.10.0
      
    

К настоящему времени весь файл должен выглядеть так:



    4.0.0

    groupId
    JavaLoggingDemo
    1.0-SNAPSHOT
    
        
            org.apache.logging.log4j
            log4j-api
            2.10.0
        
        
            org.apache.logging.log4j
            log4j-core
            2.10.0
        
         

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

Настройка регистратора

Теперь пришло время настроить log4j .

То, что я собираюсь вам показать, – это один способ сделать это; это не единственный и, вероятно, даже не лучший, что бы ни означало “лучший”. Но это определенно короче, чем многие учебные пособия, которые вы видите там.

Практически все, что вам нужно сделать, это создать файл конфигурации, а затем написать несколько строк кода. Не веришь мне? Что ж, позвольте мне просто показать вам, что.

Сначала перейдите в окно инструментов “Проект” в IntelliJ. Разверните папки и найдите папку “ресурсы” в разделе Демонстрация ведения журнала Java > src > главная , как на изображении ниже:

Теперь щелкните правой кнопкой мыши папку ресурсы и выберите Создать > Файл :

Когда вам будет предложено ввести имя, введите”log4j2.xml .” После создания файла вставьте в него следующий текст:



    
        
            
        
    
    
        
            
        
    

Редактирование кода

Сначала в верхней части файла добавьте следующие два объявления импорта:

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

Затем добавьте следующую строку в начало класса Main , в которой объявляется закрытое поле для хранения экземпляра регистратора:

private static final Logger logger = LogManager.getLogger(Main.class);

Наконец, добавьте следующую строку кода туда, где у вас ранее был вызов Files.write(Пути.get("log.txt "), сообщение.getBytes()) :

logger.info(message);

Теперь весь класс должен выглядеть так:

package com.company;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class Main {

    private static final Logger logger = LogManager.getLogger(Main.class);

    public static void main(String[] args) {
        String message = "Hello there!";
        System.out.println(message);
        logger.info(message);
    }
}

И мы закончили! Теперь все, что вам нужно сделать, это запустить приложение.

Проверка результатов

Теперь вернитесь в папку приложения и обратите внимание на новый файл там, называемый “proper.log”. Если вы откроете его с помощью текстового редактора, вы увидите следующее:

2019-09-25 15:39:29.739 [main] INFO  com.company.Main - Hello there!

Давайте разберем эту линию на составляющие.

2017-12-31 15:39:29.739

Во-первых, у нас есть временная метка в формате, совместимом с ISO-8601.

[основной]

Это относится к имени потока, из которого возникло событие.

информация

информация

ком.компания. Главный

Затем имя класса.

Привет!

И последнее, но не менее важное, само сообщение.

Мощь платформы ведения журнала Java

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

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

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

Большая часть гибкости, которую обеспечивает log4j, обусловлена тем, что называется приложением .   Приложение – это компонент, который эффективно записывает сообщение на какой-либо носитель, и их доступно множество. Это означает, что вы можете направить свои журналы в совершенно другое место, просто добавив новое приложение в XML-файл, даже не касаясь кода вашего приложения.

Разделение забот в лучшем виде, если вы спросите меня.

Счастливого Обучения!

То, что мы видели сегодня, – это только верхушка айсберга. Не ошибитесь: теперь вам предстоит многому научиться. Но у вас есть преимущество в том, что у вас уже есть живая, функциональная и реалистичная настройка для работы. Начните с того, чтобы поиграть с ним и настроить его.

Вот несколько советов о том, что вы можете сделать:

  • Узнайте, как настроить различные регистраторы, по одному для каждого уровня журнала.
  • Исследуйте и пробуйте различные доступные приложения.
  • Поиграйте с опциями, доступными для записи “макет”.
  • Узнайте о других способах настройки log4j.
  • У вас есть множество вариантов для фреймворков ведения журнала; попробуйте некоторые из них, как только вы достаточно уверены в log4j.

И чтобы узнать больше о ведении журнала Java и стратегиях ведения журнала в целом , вы, вероятно, не найдете лучшего места, чем блог Scalyr /. Scalyr предлагает инструмент агрегирования журналов , что означает, что, как только у вас будет много файлов журналов и данных, они помогут вам организовать, выполнить поиск и разобраться во всех этих данных. Так что следите за обновлениями, чтобы узнать больше!

Изучение чего-то с нуля может оказаться непосильной задачей. К счастью для вас, вам не нужно этого делать. Мы дали вам основы, на которых вы можете построить прочную и долговременную базу знаний.

Теперь все зависит от тебя.

PS: Если вы заинтересованы в дальнейшем чтении по теме ведения журнала на других языках и платформах, ознакомьтесь с некоторыми из наших доступных руководств:

Оригинал: “https://dev.to/scalyr/get-started-quickly-with-java-logging-2047”