diff --git a/AirBomber/AirBomber/AirBomber.csproj b/AirBomber/AirBomber/AirBomber.csproj
index d20b0b6..fb66889 100644
--- a/AirBomber/AirBomber/AirBomber.csproj
+++ b/AirBomber/AirBomber/AirBomber.csproj
@@ -9,19 +9,26 @@
-
+
-
+
Always
+
+
+
-
+
+
+
+
+
\ No newline at end of file
diff --git a/AirBomber/AirBomber/EntityAirBomber.cs b/AirBomber/AirBomber/EntityAirBomber.cs
index 6d5b03f..c52259a 100644
--- a/AirBomber/AirBomber/EntityAirBomber.cs
+++ b/AirBomber/AirBomber/EntityAirBomber.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace AirBomber
{
- internal class EntityAirBomber : EntityAirplane
+ public class EntityAirBomber : EntityAirplane
{
///
/// Дополнительный цвет
diff --git a/AirBomber/AirBomber/FormMapWithSetAirplanes.cs b/AirBomber/AirBomber/FormMapWithSetAirplanes.cs
index a699c5e..16eaf71 100644
--- a/AirBomber/AirBomber/FormMapWithSetAirplanes.cs
+++ b/AirBomber/AirBomber/FormMapWithSetAirplanes.cs
@@ -67,16 +67,18 @@ namespace AirBomber
if (comboBoxSelectorMap.SelectedIndex == -1 || string.IsNullOrEmpty(textBoxNewMapName.Text))
{
MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogWarning("При добавлении карты {0}", comboBoxSelectorMap.SelectedIndex == -1 ? "Не была выбрана карта" : "Не была названа карта");
return;
}
if (!_mapsDict.ContainsKey(comboBoxSelectorMap.Text))
{
MessageBox.Show("Нет такой карты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogWarning("Нет карты с названием: {0}", textBoxNewMapName.Text);
return;
}
- _logger.LogInformation("Добавлена карта \"%s\"", _mapsDict[comboBoxSelectorMap.Text]);
_mapsCollection.AddMap(textBoxNewMapName.Text, _mapsDict[comboBoxSelectorMap.Text]);
ReloadMaps();
+ _logger.LogInformation("Добавлена карта {0}", textBoxNewMapName.Text);
}
///
/// Выбор карты
@@ -86,6 +88,7 @@ namespace AirBomber
private void ListBoxMaps_SelectedIndexChanged(object sender, EventArgs e)
{
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
+ _logger.LogInformation("Был осуществлен переход на карту под названием: {0}", listBoxMaps.SelectedItem?.ToString() ?? string.Empty);
}
///
/// Удаление карты
@@ -102,6 +105,7 @@ namespace AirBomber
if (MessageBox.Show($"Удалить карту {listBoxMaps.SelectedItem}?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
_mapsCollection.DelMap(listBoxMaps.SelectedItem?.ToString() ?? string.Empty);
+ _logger.LogInformation("Удалена карта {0}", listBoxMaps.SelectedItem?.ToString() ?? string.Empty);
ReloadMaps();
}
}
@@ -131,15 +135,18 @@ namespace AirBomber
else if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] + new DrawningObject(airplane) != -1)
{
MessageBox.Show("Объект добавлен");
+ _logger.LogInformation("Добавлен объект {@Airplane}", airplane);
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
MessageBox.Show("Не удалось добавить объект");
+ _logger.LogWarning("Не удалось добавить объект");
}
}
catch (StorageOverflowException ex)
{
+ _logger.LogWarning("Ошибка переполнения хранилища: {0}", ex.Message);
MessageBox.Show($"Ошибка переполнения хранилища: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
@@ -159,18 +166,22 @@ namespace AirBomber
int pos = Convert.ToInt32(maskedTextBoxPosition.Text);
try
{
- if (_mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos != null)
+ var deletedAirplane = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty] - pos;
+ if (deletedAirplane != null)
{
MessageBox.Show("Объект удален");
+ _logger.LogInformation("Из текущей карты удален объект {@Airplane}", deletedAirplane);
pictureBox.Image = _mapsCollection[listBoxMaps.SelectedItem?.ToString() ?? string.Empty].ShowSet();
}
else
{
+ _logger.LogWarning("Не удалось добавить объект по позиции {0} равен null", pos);
MessageBox.Show("Не удалось удалить объект");
}
}
catch (AirplaneNotFoundException ex)
{
+ _logger.LogWarning("Ошибка удаления: {0}", ex.Message);
MessageBox.Show($"Ошибка удаления: {ex.Message}");
}
@@ -245,11 +256,13 @@ namespace AirBomber
try
{
_mapsCollection.SaveData(saveFileDialog.FileName);
+ _logger.LogInformation("Сохранение прошло успешно. Файл находится: {0}", saveFileDialog.FileName);
MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"Не сохранилось: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogWarning("Не удалось сохранить файл '{0}'. Текст ошибки: {1}", saveFileDialog.FileName, ex.Message);
}
}
}
@@ -266,11 +279,13 @@ namespace AirBomber
{
_mapsCollection.LoadData(openFileDialog.FileName);
MessageBox.Show("Открытие прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ _logger.LogInformation("Открытие файла '{0}' прошло успешно", openFileDialog.FileName);
ReloadMaps();
}
catch (Exception ex)
{
MessageBox.Show($"Не удалось открыть: {ex.Message}", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ _logger.LogWarning("Не удалось открыть файл {0}. Текст ошибки: {1}", openFileDialog.FileName, ex.Message);
}
}
}
diff --git a/AirBomber/AirBomber/Program.cs b/AirBomber/AirBomber/Program.cs
index e336728..c75e883 100644
--- a/AirBomber/AirBomber/Program.cs
+++ b/AirBomber/AirBomber/Program.cs
@@ -1,6 +1,9 @@
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
-using NLog.Extensions.Logging;
+using Serilog;
+using Serilog.Extensions.Logging;
+using System;
namespace AirBomber
{
@@ -27,8 +30,18 @@ namespace AirBomber
services.AddSingleton()
.AddLogging(option =>
{
+ var configuration = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile(path: "appsettings.json", optional: false, reloadOnChange: true)
+ .Build();
+
+ var logger = new LoggerConfiguration()
+ //.Destructure.ByTransforming(r => new { BodyColor = r.BodyColor.Name, r.Speed, r.Weight })
+ .ReadFrom.Configuration(configuration)
+ .CreateLogger();
+
option.SetMinimumLevel(LogLevel.Information);
- option.AddNLog("nlog.config");
+ option.AddSerilog(logger);
});
}
}
diff --git a/AirBomber/AirBomber/appsettings.json b/AirBomber/AirBomber/appsettings.json
new file mode 100644
index 0000000..cd47733
--- /dev/null
+++ b/AirBomber/AirBomber/appsettings.json
@@ -0,0 +1,47 @@
+{
+ "Serilog": {
+ "Using": [ "Serilog.Sinks.File" ],
+ "MinimumLevel": "Warning",
+ "WriteTo": [
+ {
+ "Name": "File",
+ "Args": {
+ "path": "Logs/log_.log",
+ "rollingInterval": "Day"
+ }
+ }
+ ],
+ "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
+ "Destructure": [
+ {
+ "Name": "ByTransforming",
+ "Args": {
+ "returnType": "AirBomber.EntityAirplane",
+ "transformation": "r => new { BodyColor = r.BodyColor.Name, r.Speed, r.Weight }"
+ }
+ },
+ {
+ "Name": "ByTransforming",
+ "Args": {
+ "returnType": "AirBomber.EntityAirBomber",
+ "transformation": "r => new { BodyColor = r.BodyColor.Name, DopColor = r.DopColor.Name, r.HasBombs, r.HasFuelTanks, r.Speed, r.Weight }"
+ }
+ },
+ {
+ "Name": "ToMaximumDepth",
+ "Args": { "maximumDestructuringDepth": 4 }
+ },
+ {
+ "Name": "ToMaximumStringLength",
+ "Args": { "maximumStringLength": 100 }
+ },
+ {
+ "Name": "ToMaximumCollectionCount",
+ "Args": { "maximumCollectionCount": 10 }
+ }
+ ],
+ "Properties": {
+ "Application": "AirBomber"
+ }
+ }
+}
\ No newline at end of file
diff --git a/AirBomber/AirBomber/nlog.config b/AirBomber/AirBomber/nlog.config
deleted file mode 100644
index 5c71e85..0000000
--- a/AirBomber/AirBomber/nlog.config
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file