diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneCollection.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneCollection.cs index a477cac..87892e9 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneCollection.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/FormAirplaneCollection.cs @@ -1,4 +1,6 @@ -using ProjectAirplaneWithRadar.CollectionGenericObjects; +using System.Numerics; +using Microsoft.Extensions.Logging; +using ProjectAirplaneWithRadar.CollectionGenericObjects; using ProjectAirplaneWithRadar.Drawnings; using ProjectAirplaneWithRadar.Exceptions; @@ -19,13 +21,20 @@ namespace ProjectAirplaneWithRadar /// private AbstractCompany? _company = null; + /// + /// Логгер + /// + private readonly ILogger _logger; + /// /// Конструктор /// - public FormAirplaneCollection() + public FormAirplaneCollection(ILogger logger) { InitializeComponent(); _storageCollection = new(); + _logger = logger; + _logger.LogInformation("Форма загрузилась"); } /// @@ -65,15 +74,18 @@ namespace ProjectAirplaneWithRadar { MessageBox.Show("Объект добавлен"); pictureBox.Image = _company.Show(); + _logger.LogInformation("Добавлен объект: " + airplane.GetDataForSave()); } } catch (CollectionOverflowException ex) { MessageBox.Show(ex.Message); + _logger.LogError("Ошибка: {Message}", ex.Message); } catch (ObjectNotFoundException ex) { MessageBox.Show(ex.Message); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -102,13 +114,16 @@ namespace ProjectAirplaneWithRadar { MessageBox.Show("Объект удален"); pictureBox.Image = _company.Show(); + _logger.LogInformation("Удален объект по позиции " + pos); } } catch (PositionOutOfCollectionException ex) { MessageBox.Show(ex.Message); + _logger.LogError("Ошибка: {Message}", ex.Message); } catch (ObjectNotFoundException ex) { MessageBox.Show(ex.Message); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -187,14 +202,34 @@ namespace ProjectAirplaneWithRadar return; } - CollectionType collectionType = CollectionType.None; - if (radioButtonMassive.Checked) - collectionType = CollectionType.Massive; - else if (radioButtonList.Checked) - collectionType = CollectionType.List; + //CollectionType collectionType = CollectionType.None; + //if (radioButtonMassive.Checked) + // collectionType = CollectionType.Massive; + //else if (radioButtonList.Checked) + // collectionType = CollectionType.List; - _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); - RefreshListBoxItems(); + //_storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + //RefreshListBoxItems(); + + try + { + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.Checked) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.Checked) + { + collectionType = CollectionType.List; + } + _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + RefreshListBoxItems(); + _logger.LogInformation("Коллекция добавлена " + textBoxCollectionName.Text); + } + catch (Exception ex) + { + _logger.LogError("Ошибка: {Message}", ex.Message); + } } /// @@ -209,13 +244,28 @@ namespace ProjectAirplaneWithRadar MessageBox.Show("Коллекция не выбрана"); return; } - if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) - { - return; - } + //if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + //{ + // return; + //} - _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); - RefreshListBoxItems(); + //_storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + //RefreshListBoxItems(); + + try + { + if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) + { + return; + } + _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + RefreshListBoxItems(); + _logger.LogInformation("Коллекция: " + listBoxCollection.SelectedItem.ToString() + " удалена"); + } + catch (Exception ex) + { + _logger.LogError("Ошибка: {Message}", ex.Message); + } } /// @@ -276,10 +326,12 @@ namespace ProjectAirplaneWithRadar { _storageCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName); } catch(Exception ex) { MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } } @@ -298,10 +350,12 @@ namespace ProjectAirplaneWithRadar _storageCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); RefreshListBoxItems(); + _logger.LogInformation("Загрузка из файла: {filename}", openFileDialog.FileName); } catch(Exception ex) { MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } } diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/Program.cs b/AirplaneWithRadar/ProjectAirplaneWithRadar/Program.cs index 42c6dca..4430a39 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/Program.cs +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/Program.cs @@ -1,3 +1,8 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; + namespace ProjectAirplaneWithRadar { internal static class Program @@ -11,7 +16,33 @@ namespace ProjectAirplaneWithRadar // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormAirplaneCollection()); + ServiceCollection services = new(); + ConfigureServices(services); + using ServiceProvider serviceProvider = services.BuildServiceProvider(); + Application.Run(serviceProvider.GetRequiredService()); } + + /// + /// DI + /// + /// + private static void ConfigureServices(ServiceCollection services) + { + string[] path = Directory.GetCurrentDirectory().Split('\\'); + string pathNeed = ""; + for (int i = 0; i < path.Length - 3; i++) + { + pathNeed += path[i] + "\\"; + } + services.AddSingleton() + .AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + option.AddSerilog(new LoggerConfiguration() + .ReadFrom.Configuration(new ConfigurationBuilder().AddJsonFile($"{pathNeed}serilog.json").Build()).CreateLogger()); + }); + } + + } } \ No newline at end of file diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/ProjectAirplaneWithRadar.csproj b/AirplaneWithRadar/ProjectAirplaneWithRadar/ProjectAirplaneWithRadar.csproj index af03d74..1a2decf 100644 --- a/AirplaneWithRadar/ProjectAirplaneWithRadar/ProjectAirplaneWithRadar.csproj +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/ProjectAirplaneWithRadar.csproj @@ -8,6 +8,19 @@ enable + + + + + + + + + + + + + True @@ -23,4 +36,10 @@ + + + Always + + + \ No newline at end of file diff --git a/AirplaneWithRadar/ProjectAirplaneWithRadar/serilog.json b/AirplaneWithRadar/ProjectAirplaneWithRadar/serilog.json new file mode 100644 index 0000000..0036428 --- /dev/null +++ b/AirplaneWithRadar/ProjectAirplaneWithRadar/serilog.json @@ -0,0 +1,15 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Debug", + "WriteTo": [ + { + "Name": "File", + "Args": { "path": "log.log" } + } + ], + "Properties": { + "Application": "Sample" + } + } +} \ No newline at end of file