diff --git a/Tank/Errors.log b/Tank/Errors.log new file mode 100644 index 0000000..685df9b --- /dev/null +++ b/Tank/Errors.log @@ -0,0 +1,29 @@ +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[ERROR] +Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[ERROR] +Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[ERROR] +Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[WARN ] Не удалось удалить объект с позиции1 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции1 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции1 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции1411 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции1411 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции0 (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[ERROR] Error saving all maps to file: Файл не найден (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции14 (05.12.2023) +[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023) +[WARN ] Не удалось удалить объект с позиции14 (05.12.2023) diff --git a/Tank/Infos.log b/Tank/Infos.log new file mode 100644 index 0000000..4bd47de --- /dev/null +++ b/Tank/Infos.log @@ -0,0 +1,79 @@ +[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023) +[INFO ] Объект с позиции 0удалён (05.12.2023) +[INFO ] Не удалось удалить объект из набора (05.12.2023) +[INFO ] Не удалось удалить объект из набора (05.12.2023) +[INFO ] Не удалось удалить объект из набора (05.12.2023) +[INFO ] Не удалось удалить объект из набора (05.12.2023) +[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 12 (05.12.2023) +[INFO ] Объект с позиции 0удалён (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023) +[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023) +[INFO ] Объект с позиции 14удалён (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 100 (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023) +[INFO ] Объект с позиции 14удалён (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 14 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023) +[INFO ] Объект с позиции 14удалён (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 14 (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 11 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 21 (05.12.2023) +[INFO ] Не удалось удалить объект с позиции 11 (05.12.2023) +[INFO ] Набор добавлен: 1 (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Набор добавлен: 12 (05.12.2023) +[INFO ] Набор добавлен: 1 (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Добавлен новый объект (05.12.2023) +[INFO ] Сохранение всех объектов в файл: E:\file.txt (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023) +[INFO ] Объект с позиции 1удалён (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023) +[INFO ] Объект с позиции 14удалён (05.12.2023) +[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023) +[INFO ] Объект с позиции 14удалён (05.12.2023) diff --git a/Tank/Tank.iml b/Tank/Tank.iml index c90834f..af3c693 100644 --- a/Tank/Tank.iml +++ b/Tank/Tank.iml @@ -1,11 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tank/src/FormTankCollection.java b/Tank/src/FormTankCollection.java index bd5f100..ee99d3f 100644 --- a/Tank/src/FormTankCollection.java +++ b/Tank/src/FormTankCollection.java @@ -14,10 +14,11 @@ import javax.swing.filechooser.FileNameExtensionFilter; import java.util.LinkedList; import java.util.Queue; +import org.apache.logging.log4j.Logger; + public class FormTankCollection { private class Canvas extends JComponent { - public Canvas() { - } + public Canvas() { } public void paintComponent(Graphics g) { super.paintComponent(g); @@ -61,7 +62,13 @@ public class FormTankCollection { } } - FormTankCollection() { + // Логгер + private Logger logger; + + FormTankCollection(Logger logger) { + System.setProperty("log4j.configutationFile", "src//log4j2.xml"); + this.logger = logger; + listModel = new DefaultListModel(); jListStorage = new JList(listModel); canv = new Canvas(); @@ -73,6 +80,7 @@ public class FormTankCollection { new ActionListener() { public void actionPerformed(ActionEvent e) { if (jListStorage.getSelectedIndex() == -1) { + logger.warn("Добавление объекта в несуществующий набор"); return; } var obj = _storage.get(jListStorage.getSelectedValue()); @@ -84,11 +92,20 @@ public class FormTankCollection { form.buttonAdd.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { - if (obj != null && obj.Add(form._vehicle) != -1) { - JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); - Draw(); - } else { + try { + if (obj != null && obj.Add(form._vehicle) != -1) { + logger.info("Добавлен новый объект"); + JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE); + Draw(); + } + } catch (TankStorageOverflowException ex) { + logger.warn("Коллекция переполнена: "+ex.getMessage()); + JOptionPane.showMessageDialog(null, ex.getMessage()); JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); + + } catch (Exception ex){ + logger.fatal("Неизвестная ошибка: "+ex.getMessage()); + JOptionPane.showMessageDialog(null, "Ошибка. Неизвестная ошибка: "+ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } form.Frame.dispose(); } @@ -106,6 +123,7 @@ public class FormTankCollection { new ActionListener() { public void actionPerformed(ActionEvent e) { if (jListStorage.getSelectedIndex() == -1) { + logger.warn("Удаление объекта из несуществующего набора"); return; } var obj = _storage.get(jListStorage.getSelectedValue()); @@ -127,13 +145,25 @@ public class FormTankCollection { } int pos = Integer.parseInt(TextBoxNumber.getText()); - var removed = obj.remove(pos); - if (removed != null) { - Queue.add(removed); - JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE); - Draw(); - } else { - JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); + try { + var removed = obj.remove(pos); + if (removed != null) { + JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE); + Queue.add(removed); + Draw(); + logger.info("Объект с позиции " + pos + "удалён"); + } + else + { + JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE); + logger.info("Не удалось удалить объект с позиции " + pos); + } + } catch (TankNotFoundException ex) { + logger.warn("Не удалось удалить объект с позиции"+ pos); + JOptionPane.showMessageDialog(null, ex.getMessage()); + } catch (Exception ex) { + logger.fatal("Неизвестная ошибка: " +ex.getMessage()); + JOptionPane.showMessageDialog(null, "Неизвестная ошибка: "+ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE); } } } @@ -145,6 +175,7 @@ public class FormTankCollection { public void actionPerformed(ActionEvent e) { if (Queue.size() == 0) { JOptionPane.showMessageDialog(null, "Нет удалённых", "Информация", JOptionPane.INFORMATION_MESSAGE); + logger.info("Нет удалённых объектов"); return; } FormTank form = new FormTank(); @@ -180,10 +211,12 @@ public class FormTankCollection { public void actionPerformed(ActionEvent e) { if (textBoxSetName.getText().length() == 0) { JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Информация", JOptionPane.INFORMATION_MESSAGE); + logger.warn("Не все данные заполнены"); return; } _storage.AddSet(textBoxSetName.getText()); ReloadObjects(); + logger.info("Набор добавлен: "+textBoxSetName.getText()); } } ); @@ -201,12 +234,14 @@ public class FormTankCollection { new ActionListener() { public void actionPerformed(ActionEvent e) { if (jListStorage.getSelectedIndex() == -1) { + logger.warn("Удаление несуществующего набора"); return; } if (JOptionPane.showConfirmDialog(null, "Удалить объект " + jListStorage.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { return; } _storage.DelSet(jListStorage.getSelectedValue()); + logger.info("Гараж "+jListStorage.getSelectedValue()+" Удалён"); ReloadObjects(); } } @@ -233,10 +268,15 @@ public class FormTankCollection { fileChooser.setDialogTitle("Выберите файл для загрузки данных"); if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); - if (_storage.LoadData(selectedFile.getAbsolutePath())) { - JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE); + + try { + _storage.LoadData(fileChooser.getSelectedFile().getAbsolutePath()); + ReloadObjects(); + logger.info("Загрузка всех объектов из файла: " + fileChooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(null, "Загрузка всех объектов прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); + } catch (Exception ex) { + logger.error("\n" + "Ошибка при загрузке всех объектов из файла: " + ex.getMessage()); + JOptionPane.showMessageDialog(null,"Ошибка при загрузке всех объектов" + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); } } ReloadObjects(); @@ -256,10 +296,15 @@ public class FormTankCollection { if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); - if(_storage.SaveData(selectedFile.getAbsolutePath())) - JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); - else - JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE); + + try { + _storage.SaveData(fileChooser.getSelectedFile().getAbsolutePath()); + logger.info("Сохранение всех объектов в файл: " + fileChooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(null,"Сохранение объектов прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); + } catch (Exception ex) { + logger.error("Error saving all maps to file: " +ex.getMessage()); + JOptionPane.showMessageDialog(null, "Ошибка при сохранении объектов: "+ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); + } } } } @@ -281,10 +326,14 @@ public class FormTankCollection { if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); - if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) { + try { + _storage.LoadDataSingle(fileChooser.getSelectedFile().getAbsolutePath()); + ReloadObjects(); + logger.info("Загрузка всех объектов из файла: " + fileChooser.getSelectedFile().getAbsolutePath()); JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE); + } catch (Exception ex) { + logger.error("\n" + "Ошибка при загрузке всех объектов из файла: " + ex.getMessage()); + JOptionPane.showMessageDialog(null, "Не загрузилось" + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); } } ReloadObjects(); @@ -308,10 +357,15 @@ public class FormTankCollection { if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); - if (_storage.SaveDataSingle(selectedFile.getAbsolutePath(), jListStorage.getSelectedValue())) - JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); - else - JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE); + + try { + _storage.SaveDataSingle(fileChooser.getSelectedFile().getAbsolutePath(), jListStorage.getSelectedValue()); + logger.info("Сохранение всех объектов в файл: " + fileChooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(null,"Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE); + } catch (Exception ex) { + logger.error("Error saving all maps to file: " +ex.getMessage()); + JOptionPane.showMessageDialog(null, "Не сохранилось: "+ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE); + } } } } diff --git a/Tank/src/Main.java b/Tank/src/Main.java index c89dd48..2b025d0 100644 --- a/Tank/src/Main.java +++ b/Tank/src/Main.java @@ -1,5 +1,7 @@ +import org.apache.logging.log4j.*; + public class Main { public static void main(String[] args) { - new FormTankCollection(); + new FormTankCollection(LogManager.getLogger(Main.class)); } } \ No newline at end of file diff --git a/Tank/src/SetGeneric.java b/Tank/src/SetGeneric.java index a404521..6671cee 100644 --- a/Tank/src/SetGeneric.java +++ b/Tank/src/SetGeneric.java @@ -17,18 +17,18 @@ public class SetGeneric { // Добавление объектов в набор public int Insert(T tank) { if(_places.size() >= _maxCount) - return -1; + throw new TankStorageOverflowException(_maxCount); _places.add(0,tank); return 0; } public boolean Insert(T tank, int position) { // Проверка позиции - if (position < 0 || position > _places.size()) - return false; + if (position < 0 || position >= Count()) + throw new TankNotFoundException(position); if (_places.size() >= _maxCount) - return false; + throw new TankStorageOverflowException(_maxCount); if (position == _places.size()) _places.add(tank); @@ -41,8 +41,9 @@ public class SetGeneric { // Удаление объекта из набора с конкретной позиции public boolean Remove(int position) { // Проверка позиции - if (position < 0 || position >= _places.size()) - return false; + if (position < 0 || position >= Count() || position > _maxCount) + throw new TankNotFoundException(position); + _places.remove(position); return true; } diff --git a/Tank/src/TankNotFoundException.java b/Tank/src/TankNotFoundException.java new file mode 100644 index 0000000..a06d9a0 --- /dev/null +++ b/Tank/src/TankNotFoundException.java @@ -0,0 +1,15 @@ +public class TankNotFoundException extends RuntimeException { + public TankNotFoundException() { } + public TankNotFoundException(String message) { + super(message); + } + public TankNotFoundException(String message, Throwable exception) { + super(message, exception); + } + public TankNotFoundException(Throwable exception) { + super(exception); + } + protected TankNotFoundException(int pos) { + super("Не найден объект по позиции "+pos); + } +} \ No newline at end of file diff --git a/Tank/src/TankStorageOverflowException.java b/Tank/src/TankStorageOverflowException.java new file mode 100644 index 0000000..becb173 --- /dev/null +++ b/Tank/src/TankStorageOverflowException.java @@ -0,0 +1,15 @@ +public class TankStorageOverflowException extends RuntimeException{ + public TankStorageOverflowException() { } + public TankStorageOverflowException(String message){ + super(message); + } + public TankStorageOverflowException(String message, Throwable exception){ + super(message, exception); + } + protected TankStorageOverflowException(Throwable exception){ + super(exception); + } + public TankStorageOverflowException(int count){ + super("В наборе превышено допустимое количество: "+count); + } +} \ No newline at end of file diff --git a/Tank/src/TanksGenericCollections.java b/Tank/src/TanksGenericCollections.java index 8632d9c..d0fb963 100644 --- a/Tank/src/TanksGenericCollections.java +++ b/Tank/src/TanksGenericCollections.java @@ -39,9 +39,8 @@ public class TanksGenericCollections collections = new TanksGenericCollections<>(_pictureWidth, _pictureHeight); if (_tankStorages.containsKey(key)){ @@ -87,7 +82,7 @@ public class TanksGenericStorage { for (String elem : tanksStrings) { DrawingArmoVehicle vehicle = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight); if(vehicle == null || collections.Add(vehicle) == -1) - return false; + throw new NoSuchElementException("Объект не найден"); } if(_tankStorages.containsKey(key)) @@ -95,13 +90,11 @@ public class TanksGenericStorage { _tankStorages.put(key, collections); } catch (IOException e) { e.printStackTrace(); - return false; } - return true; } // Сохранение информации по технике в хранилище в файл - public boolean SaveData(String filename) { + public void SaveData(String filename) throws IOException { if(new File(filename).exists()) { new File(filename).delete(); } @@ -117,30 +110,28 @@ public class TanksGenericStorage { } if (data.length() == 0) - return false; + throw new InvalidStreamException("Нет данных для сохранения"); try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) { writer.write("TankStorage" + System.lineSeparator() + data.toString()); } catch (IOException e) { e.printStackTrace(); - return false; } - return true; } // Загрузка информации по технике в хранилище из файла - public boolean LoadData(String filename) { + public void LoadData(String filename) throws IOException { if (!new File(filename).exists()) { - return false; + throw new FileNotFoundException("Файл не найден"); } try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { String s = reader.readLine(); if (s == null || s.length() == 0) - return false; + throw new NullPointerException("Нет данных для загрузки"); if (!s.startsWith("TankStorage")) - return false; + throw new IllegalArgumentException("Неверный формат данных"); //если нет такой записи, то это не те данные _tankStorages.clear(); @@ -158,15 +149,13 @@ public class TanksGenericStorage { for (String elem : reversedSet) { DrawingArmoVehicle vehicle = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight); if (vehicle == null || collection.Add(vehicle) == -1) - return false; + throw new NoSuchElementException("Объект не найден"); } _tankStorages.put(record[0], collection); } } catch (IOException e) { e.printStackTrace(); - return false; } - return true; } // Словарь (как хранилище) diff --git a/Tank/src/log4j2.xml b/Tank/src/log4j2.xml new file mode 100644 index 0000000..ea42c3c --- /dev/null +++ b/Tank/src/log4j2.xml @@ -0,0 +1,27 @@ + + + + + + + [%-5level] %msg (%d{dd.MM.yyyy})%n + + + + + + + + [%-5level] %msg (%d{dd.MM.yyyy})%n + + + + + + + + + + + +