diff --git a/AirFighter/AirFighter/AirFighter.csproj b/AirFighter/AirFighter/AirFighter.csproj index 13ee123..a760b5a 100644 --- a/AirFighter/AirFighter/AirFighter.csproj +++ b/AirFighter/AirFighter/AirFighter.csproj @@ -8,6 +8,19 @@ enable + + + + + + + + + + + + + True @@ -23,4 +36,10 @@ + + + Always + + + \ No newline at end of file diff --git a/AirFighter/AirFighter/FormMapWithSetCars.cs b/AirFighter/AirFighter/FormMapWithSetCars.cs index 19beaf0..5ef6d3a 100644 --- a/AirFighter/AirFighter/FormMapWithSetCars.cs +++ b/AirFighter/AirFighter/FormMapWithSetCars.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.Logging; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -24,9 +25,14 @@ namespace AirFighter /// /// Конструктор /// - public FormMapWithSetCars() + + private readonly ILogger _logger; + + public FormMapWithSetCars(ILogger logger) { InitializeComponent(); + _logger = logger; + _mapsCollection = new MapsCollection(pictureBox.Width, pictureBox.Height); comboBoxSelectorMap.Items.Clear(); @@ -70,6 +76,7 @@ namespace AirFighter { if (comboBoxSelectorMap.SelectedIndex == -1 || string.IsNullOrEmpty(textBoxNewMapName.Text)) { + _logger.LogInformation("При попытке создания карты не все данные заполнены"); MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; @@ -77,15 +84,18 @@ namespace AirFighter if (!_mapsDict.ContainsKey(comboBoxSelectorMap.Text)) { MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogInformation($"Нет карты с названием {comboBoxSelectorMap.Text}"); return; } _mapsCollection.AddMap(textBoxNewMapName.Text, _mapsDict[comboBoxSelectorMap.Text]); + _logger.LogInformation($"Добавлена карта {textBoxNewMapName.Text}"); ReloadMaps(); } private void ListBoxMaps_SelectedIndexChanged(object sender, EventArgs e) { + _logger?.LogInformation($"Переход на карту {listBoxMaps.SelectedItem?.ToString()}"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); } @@ -101,6 +111,7 @@ namespace AirFighter { _mapsCollection.DelMap(listBoxMaps.SelectedItem?.ToString() ?? string.Empty); + _logger.LogInformation($"Удаление карты {listBoxMaps.SelectedItem}"); ReloadMaps(); } } @@ -119,13 +130,16 @@ namespace AirFighter MessageBox.Show("Объект добавлен"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation("На карту добавлен новый объект"); } } catch (StorageOverflowException ex) { MessageBox.Show($"Ошибка переполнения: {ex.Message}"); + _logger.LogWarning($"Ошибка переполнения: {ex.Message}"); } catch (Exception ex) { MessageBox.Show($"Неизвестная ошибка: {ex.Message}"); + _logger.LogWarning($"Неизвестная ошибка: {ex.Message}"); } } @@ -166,13 +180,17 @@ namespace AirFighter MessageBox.Show("Объект удален"); pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation($"Удален объект на позиции {pos}"); } } catch (AircraftNotFoundException ex) { MessageBox.Show($"Ошибка удаления: {ex.Message}"); - } catch (Exception ex) + _logger.LogWarning($"Ошибка при удалении объекта на позиции {pos}: {ex.Message}"); + } + catch (Exception ex) { MessageBox.Show($"Неизвестная ошибка: {ex.Message}"); + _logger.LogWarning($"Неизвестная ошибка при удалении объекта на позиции {pos}: {ex.Message}"); } } @@ -188,6 +206,7 @@ namespace AirFighter return; } pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet(); + _logger.LogInformation("Показ хранилища"); } /// @@ -202,6 +221,7 @@ namespace AirFighter return; } pictureBox.Image =_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowOnMap(); + _logger.LogInformation("Просмотр карты"); } /// /// Перемещение @@ -233,7 +253,6 @@ namespace AirFighter break; } pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].MoveObject(dir); - } private void SaveToolStripMenuItem_Click(object sender, EventArgs e) @@ -244,9 +263,11 @@ namespace AirFighter { _mapsCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation($"Успешное сохранение в файл {saveFileDialog.FileName}"); } catch(Exception ex) { MessageBox.Show($"Не сохранилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning($"Ошибка при сохранении в файл {saveFileDialog.FileName}: {ex.Message}"); } } @@ -259,10 +280,12 @@ namespace AirFighter { _mapsCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation($"Успешная загрузка из файла {openFileDialog.FileName}"); ReloadMaps(); } catch(Exception ex) { MessageBox.Show($"Не загрузилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning($"Ошибка при загрузке из файла {openFileDialog.FileName}: {ex.Message}"); } } diff --git a/AirFighter/AirFighter/Program.cs b/AirFighter/AirFighter/Program.cs index a1208bc..418949a 100644 --- a/AirFighter/AirFighter/Program.cs +++ b/AirFighter/AirFighter/Program.cs @@ -1,3 +1,8 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; + namespace AirFighter { internal static class Program @@ -8,10 +13,30 @@ namespace AirFighter [STAThread] static void Main() { - // To customize application configuration such as set high DPI settings or default font, - // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormMapWithSetCars()); + var services = new ServiceCollection(); + ConfigureServices(services); + using (ServiceProvider serviceProvider = services.BuildServiceProvider()) + { + Application.Run(serviceProvider.GetRequiredService()); + } + } + + private static void ConfigureServices(ServiceCollection services) + { + services.AddSingleton() + .AddLogging(option => + { + var config = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("loggerConfig.json") + .Build(); + + Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(config).CreateLogger(); + + option.SetMinimumLevel(LogLevel.Information); + option.AddSerilog(); + }); } } } \ No newline at end of file diff --git a/AirFighter/AirFighter/loggerConfig.json b/AirFighter/AirFighter/loggerConfig.json new file mode 100644 index 0000000..3b7738d --- /dev/null +++ b/AirFighter/AirFighter/loggerConfig.json @@ -0,0 +1,17 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Information", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/log_.log", + "rollingInterval": "Day", + "outputTemplate": "{Level:u4}: {Message:lj} [{Timestamp:HH:mm:ss.fff}]{NewLine}" + } + } + ], + "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] + } +} \ No newline at end of file