МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ ОТЧЕТ по лабораторной работе №9 по дисциплине «Объектно-ориентированное программирование» Студент гр. 1308 Мальцев А.П. Преподаватель Гречухин М.Н. Санкт-Петербург 2023 Цель работы: Знакомство с методами протоколирования работы приложения использованием библиотеки Log4j. Описание задания 1. Перечень используемых типов сообщений, которые выводятся в логфайл. 2. Конфигурационный файл log4j.properties. 3. Исходные тексты классов, где осуществляется протоколирование работы приложения. 4. Фрагменты кода, содержащие WARN, INFO, ERROR и DEBUG Перечень используемых типов сообщений, которые выводятся в логфайл.: Конфигурационный файл log4j.properties log4j.rootLogger=DEBUG, file # Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=./Data/Library/protocol.log log4j.appender.file.MaxFileSize=1MB log4j.appender.file.MaxBackupIndex=1 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %-5p %c{1}:%L - %m%n 2 с Пояснение строк: 1. Описывает уровень сообщения DEBUG c символическим названием file, на которое будет выводиться сообщение. 2. Указывает, что сообщение будет выводиться в файл. 3. Задаёт имя и путь файлу для записи. 4. Определяет максимальный размер файла. 5. Максимальное резервное копирование. 6. Описывает формат вывода текста. 7. Вывод данных. Фрагменты кода, содержащие WARN, INFO, ERROR и DEBUG: private class ActFilter implements ActionListener { /** * Обработка действия */ public void actionPerformed(ActionEvent arg0) { logGUI.info("Поиск отлея"); logGUI.warn("Есть вероятность ошибки поиска"); try { checkName(hotels); logGUI.debug("Ошибка не произошла"); } catch (NullPointerException ex) { JOptionPane.showMessageDialog(tourList, ex.toString()); logGUI.error("Пустая строчка", ex); } catch (MyExceptionSearch myEx) { JOptionPane.showMessageDialog(null, myEx.getMessage()); logGUI.error("Данные для поиска не введены", myEx); } } } private class ActDelete implements ActionListener{ /** * Обработка действия */ public void actionPerformed (ActionEvent event) { logGUI.info("Удаление строки"); 3 logGUI.warn("Есть вероятность ошибки удаления"); final String TITLE_confirm = "Окно подтверждения"; int result = JOptionPane.showConfirmDialog(deleteButon, "Вы уверены что хотите удалить строчку?", TITLE_confirm, 0, JOptionPane.WARNING_MESSAGE); if (result == JOptionPane.YES_OPTION) { try{ deleteTable(tours); logGUI.debug("Ошибка не произошла"); } catch(MyExceptionDelete myEx) { JOptionPane.showMessageDialog(null, myEx.getMessage()); logGUI.error("Пустая таблица", myEx); } } } } private class ActXml implements ActionListener{ /** * Обработка действия */ public void actionPerformed (ActionEvent event) { final String TITLE_confirm = "Окно подтверждения"; int result = JOptionPane.showConfirmDialog(xmlButon, "Открыть или сохранить xml?", TITLE_confirm, 2, JOptionPane.QUESTION_MESSAGE ); if (result == JOptionPane.OK_OPTION) { logGUI.info("Открытие XML"); logGUI.warn("Есть вероятность ошибки открытия"); try { xmlOpen q = new xmlOpen("Открыть данные XML",model,tours); logGUI.debug("Ошибка не произошла"); } catch (Exception e) { 4 // TODO Auto-generated catch block e.printStackTrace(); logGUI.error("Ошибка открытия", e); } } else if(result == JOptionPane.CANCEL_OPTION) { logGUI.info("Сохранение XML"); logGUI.warn("Есть вероятность ошибки сохранения"); try { xmlSave q = new xmlSave("Сохранение данных XML",model); logGUI.debug("Ошибка не произошла"); } catch (Exception e1) { e1.printStackTrace(); logGUI.error("Ошибка сохранения", e1); } } } } private class ActAdd implements ActionListener{ /** * Обработка нажатия */ public void actionPerformed (ActionEvent event) { logGUI.info("Добавление тура"); ((DefaultTableModel)tours.getModel()).addRow(new Object[]{"Тест", "Тест", "Тест","Тест","Тест"}); } } private class ActPdf implements ActionListener{ /** * Обработка нажатия */ @SuppressWarnings("static-access") public void actionPerformed (ActionEvent event) { 5 logGUI.info("Генерирование отчета PDF"); PdfHtml qwe = new PdfHtml(model); //pdf = new print("C:\\Users\\Irbis\\Documents\\ООП\\Пример для открытия.xml","XPath","report3.jrxml","OtchetPdf"); } } private class ActOpen implements ActionListener{ /** * Обработка нажатия */ public void actionPerformed (ActionEvent event) { logGUI.info("Открытие текстового файла"); FileOpen file = new FileOpen("Открытие данных",model); } } private class ActSave implements ActionListener{ /** * Обработка нажатия */ public void actionPerformed (ActionEvent event) { logGUI.info("Сохранение текстового файла"); FileSave file = new FileSave("Сохранение данных данных",model); } } public static void main(String[] args) { logGUI.info("Запуск программы"); new Gui().show(); } 6