diff --git a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/AbstractCompany.cs b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/AbstractCompany.cs index 5105be1..dcfd16e 100644 --- a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/AbstractCompany.cs +++ b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/AbstractCompany.cs @@ -32,7 +32,7 @@ public abstract class AbstractCompany /// /// Вычисление максимального количества элементов, который можно разместить в окне /// -private int GetMaxCount => _pictureWidth * _pictureHeight /(_placeSizeWidth * _placeSizeHeight); +private int GetMaxCount => _pictureWidth / _placeSizeWidth * (_pictureHeight / _placeSizeHeight); /// /// Конструктор /// diff --git a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/ListGenericObjects.cs b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/ListGenericObjects.cs index e9c1a10..a72d856 100644 --- a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/ListGenericObjects.cs +++ b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/ListGenericObjects.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using TrolleybusProject.Exceptions; namespace TrolleybusProject.CollectionGenericObjects; @@ -40,42 +41,43 @@ public class ListGenericObjects : ICollectionGenericObjects } public T? Get(int position) { - if (position >= Count || position < 0) + if (position < 0 || position >= Count) { - return null; + throw new PositionOutOfCollectionException(position); } return _collection[position]; } public int Insert(T obj) { - if (Count == _maxCount) + if (Count + 1 > _maxCount) { - return -1; + throw new CollectionOverflowException(Count); } - _collection.Add(obj); - return _collection.Count; + return 1; } public int Insert(T obj, int position) { - if (Count == _maxCount || position < 0 || position > Count) - { - return -1; - } - - _collection.Insert(position, obj); - return position; + if (position < 0 || position > Count) + { + throw new PositionOutOfCollectionException(position); + } + if (Count + 1 > _maxCount) + { + throw new CollectionOverflowException(Count); + } + _collection.Insert(position, obj); + return 1; } public T? Remove(int position) { - if (_collection == null || position < 0 || position >= _collection.Count) { - - return null; - + if (position < 0 || position > Count) + { + throw new PositionOutOfCollectionException(position); } T? obj = _collection[position]; - _collection[position] = null; + _collection.RemoveAt(position); return obj; } diff --git a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/MassiveGenericObjects.cs b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/MassiveGenericObjects.cs index a661f5f..b37471f 100644 --- a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/MassiveGenericObjects.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using TrolleybusProject.Exceptions; namespace TrolleybusProject.CollectionGenericObjects; @@ -50,16 +51,34 @@ internal class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { - if (position >= _collection.Length || position < 0) - { - return null; - } + if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position); + return _collection[position]; } public int Insert(T obj) { - int index = 0; + for (int i = 0; i < Count; i++) + { + if (_collection[i] == null) + { + _collection[i] = obj; + return i; + } + } + + throw new CollectionOverflowException(Count); + } + + public int Insert(T obj, int position) + { + if (position >= _collection.Length || position < 0) throw new PositionOutOfCollectionException(position); + if (_collection[position] == null) + { + _collection[position] = obj; + return position; + } + int index = position + 1; while (index < _collection.Length) { if (_collection[index] == null) @@ -67,50 +86,25 @@ internal class MassiveGenericObjects : ICollectionGenericObjects _collection[index] = obj; return index; } - index++; + ++index; } - return -1; - } - - public int Insert(T obj, int position) - { - - if (position >= _collection.Length || position < 0) - return -1; - - - if (_collection[position] != null) + index = position - 1; + while (index >= 0) { - int nullIndex = -1; - for (int i = position + 1; i < Count; i++) + if (_collection[index] == null) { - if (_collection[i] == null) - { - nullIndex = i; - break; - } - } - if (nullIndex < 0) - { - return -1; - } - int j = nullIndex - 1; - while (j >= position) - { - _collection[j + 1] = _collection[j]; - j--; + _collection[index] = obj; + return index; } + --index; } - _collection[position] = obj; - return position; + throw new CollectionOverflowException(Count); } public T? Remove(int position) { - if (position >= _collection.Length || position < 0) - { - return null; - } + if (position < 0 || position >= Count) throw new PositionOutOfCollectionException(position); + if (_collection[position] == null) throw new ObjectNotFoundException(position); T? temp = _collection[position]; _collection[position] = null; return temp; diff --git a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/StorageCollection.cs b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/StorageCollection.cs index 5586c45..27fb31c 100644 --- a/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/StorageCollection.cs +++ b/TrolleybusProject/TrolleybusProject/CollectionGenericObjects/StorageCollection.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using TrolleybusProject.Drawnings; +using TrolleybusProject.Exceptions; namespace TrolleybusProject.CollectionGenericObjects; @@ -90,11 +91,12 @@ public class StorageCollection } } - public bool SaveData(string filename) + public void SaveData(string filename) { if (_storages.Count == 0) { - return false; + throw new Exception("В хранилище отсутствуют коллекции для сохранения"); + } if (File.Exists(filename)) { @@ -130,25 +132,25 @@ public class StorageCollection } } } - return true; + } - public bool LoadData(string filename) + public void LoadData(string filename) { if (!File.Exists(filename)) { - return false; + throw new FileNotFoundException("Файл не существует!"); } using (StreamReader reader = new(filename)) { string line = reader.ReadLine(); if (line == null || line.Length == 0) { - return false; + throw new ArgumentException("В файле нет данных"); } if (!line.Equals(_collectionKey)) { - return false; + throw new InvalidDataException("В файле неверные данные"); } _storages.Clear(); while ((line = reader.ReadLine()) != null) @@ -163,25 +165,34 @@ public class StorageCollection ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); if (collection == null) { - return false; + throw new InvalidCastException("Не удалось определить тип коллекции: " + record[1]); } collection.MaxCount = Convert.ToInt32(record[2]); string[] set = record[3].Split(_separatorItems, StringSplitOptions.RemoveEmptyEntries); foreach (string elem in set) { - if (elem?.CreateDrawningBus() is T bus) + if (elem?.CreateDrawningBus() is T boat) { - if (collection.Insert(bus) <0) + try { - return false; + if (collection.Insert(boat) < 0) + { + throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]); + + } } + catch (CollectionOverflowException ex) + { + throw new CollectionOverflowException("Коллекция переполнена", ex); + } + } } _storages.Add(record[0], collection); } } - return true; + } /// diff --git a/TrolleybusProject/TrolleybusProject/Drawnings/ExtentionDrawningBus.cs b/TrolleybusProject/TrolleybusProject/Drawnings/ExtentionDrawningBus.cs index 9d66f43..0841849 100644 --- a/TrolleybusProject/TrolleybusProject/Drawnings/ExtentionDrawningBus.cs +++ b/TrolleybusProject/TrolleybusProject/Drawnings/ExtentionDrawningBus.cs @@ -5,52 +5,49 @@ using System.Text; using System.Threading.Tasks; using TrolleybusProject.Entities; -namespace TrolleybusProject.Drawnings { +namespace TrolleybusProject.Drawnings; - public static class ExtentionDrawningBus +public static class ExtentionDrawningBus +{ + private static readonly string _separatorForObject = ":"; + + /// + /// Создание объекта из строки + /// + /// Строка с данными для создания объекта + /// Объект + public static DrawningBus? CreateDrawningBus(this string info) { - /// - /// Разделитель для записи информации по объекту в файл - /// - private static readonly string _separatorForObject = ":"; - /// - /// Создание объекта из строки - /// - /// Строка с данными для создания объекта - /// Объект - public static DrawningBus? CreateDrawningBus(this string info) + string[] strs = info.Split(_separatorForObject); + EntityBus? bus = EntityTrolleybus.CreateEntityTrolleybus(strs); + if (bus != null) { - string[] strs = info.Split(_separatorForObject); - EntityBus? bus = EntityTrolleybus.CreateEntityTrolleybus(strs); - if (bus != null) - { - return new DrawningTrolleybus(bus); - } - bus = EntityBus.CreateEntityBus(strs); - if (bus != null) - { - return new DrawningBus(bus); - } - return null; - } - /// - /// Получение данных для сохранения в файл - /// - /// Сохраняемый объект - /// Строка с данными по объекту - public static string GetDataForSave(this DrawningBus drawningBus) - { - string[]? array = drawningBus?.EntityBus?.GetStringRepresentation(); - if (array == null) - { - return string.Empty; - } - return string.Join(_separatorForObject, array); + return new DrawningTrolleybus(bus); } + bus = EntityBus.CreateEntityBus(strs); + if (bus != null) + { + return new DrawningBus(bus); + } - - + return null; } -} + /// + /// Получение данных для сохранения в файл + /// + /// Сохраняемый объект + /// Строка с данными по объекту + public static string GetDataForSave(this DrawningBus drawningBus) + { + string[]? array = drawningBus?.EntityBus?.GetStringRepresentation(); + + if (array == null) + { + return string.Empty; + } + + return string.Join(_separatorForObject, array); + } +} \ No newline at end of file diff --git a/TrolleybusProject/TrolleybusProject/Exceptions/CollectionOverflowException.cs b/TrolleybusProject/TrolleybusProject/Exceptions/CollectionOverflowException.cs new file mode 100644 index 0000000..6ba70ce --- /dev/null +++ b/TrolleybusProject/TrolleybusProject/Exceptions/CollectionOverflowException.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace TrolleybusProject.Exceptions; + +[Serializable] + +public class CollectionOverflowException : ApplicationException +{ + public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { } +public CollectionOverflowException() : base() { } + public CollectionOverflowException(string message) : base(message) { } + public CollectionOverflowException(string message, Exception exception) : + base(message, exception) + { } + protected CollectionOverflowException(SerializationInfo info, + StreamingContext contex) : base(info, contex) { } +} diff --git a/TrolleybusProject/TrolleybusProject/Exceptions/ObjectNotFoundException.cs b/TrolleybusProject/TrolleybusProject/Exceptions/ObjectNotFoundException.cs new file mode 100644 index 0000000..6330ff2 --- /dev/null +++ b/TrolleybusProject/TrolleybusProject/Exceptions/ObjectNotFoundException.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace TrolleybusProject.Exceptions; + + +[Serializable] +internal class ObjectNotFoundException : ApplicationException +{ + public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i) { } + public ObjectNotFoundException() : base() { } + public ObjectNotFoundException(string message) : base(message) { } + public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { } + protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } +} + diff --git a/TrolleybusProject/TrolleybusProject/Exceptions/PositionOutOfCollectionException.cs b/TrolleybusProject/TrolleybusProject/Exceptions/PositionOutOfCollectionException.cs new file mode 100644 index 0000000..d6ebdf9 --- /dev/null +++ b/TrolleybusProject/TrolleybusProject/Exceptions/PositionOutOfCollectionException.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace TrolleybusProject.Exceptions; +/// +/// Класс, описывающий ошибку выхода за границы коллекции +/// +[Serializable] + +internal class PositionOutOfCollectionException : ApplicationException +{ + public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции.Позиция " + i) { } +public PositionOutOfCollectionException() : base() { } + public PositionOutOfCollectionException(string message) : base(message) { } + public PositionOutOfCollectionException(string message, Exception + exception) : base(message, exception) { } + protected PositionOutOfCollectionException(SerializationInfo info, + StreamingContext contex) : base(info, contex) { } + +} diff --git a/TrolleybusProject/TrolleybusProject/FormBusCollection.Designer.cs b/TrolleybusProject/TrolleybusProject/FormBusCollection.Designer.cs index 74448a6..aa68b52 100644 --- a/TrolleybusProject/TrolleybusProject/FormBusCollection.Designer.cs +++ b/TrolleybusProject/TrolleybusProject/FormBusCollection.Designer.cs @@ -127,7 +127,7 @@ buttonAddBus.Location = new Point(26, 18); buttonAddBus.Name = "buttonAddBus"; buttonAddBus.Size = new Size(244, 34); - buttonAddBus.TabIndex = 1; + buttonAddBus.TabIndex = 2; buttonAddBus.Text = "Добавление автобуса"; buttonAddBus.UseVisualStyleBackColor = true; buttonAddBus.Click += buttonAddBus_Click; @@ -212,7 +212,7 @@ radioButtonMassive.Location = new Point(11, 65); radioButtonMassive.Name = "radioButtonMassive"; radioButtonMassive.Size = new Size(98, 29); - radioButtonMassive.TabIndex = 2; + radioButtonMassive.TabIndex = 1; radioButtonMassive.TabStop = true; radioButtonMassive.Text = "Массив"; radioButtonMassive.UseVisualStyleBackColor = true; @@ -263,7 +263,6 @@ menuStrip.Size = new Size(1204, 33); menuStrip.TabIndex = 2; menuStrip.Text = "Фаил"; - // // FileToolStripMenuItem // @@ -281,7 +280,7 @@ // save_ToolStripMenuItem.Name = "save_ToolStripMenuItem"; save_ToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.S; - save_ToolStripMenuItem.Size = new Size(270, 34); + save_ToolStripMenuItem.Size = new Size(261, 34); save_ToolStripMenuItem.Text = "Сохранить"; save_ToolStripMenuItem.Click += save_ToolStripMenuItem_Click; // @@ -289,7 +288,7 @@ // load_ToolStripMenuItem.Name = "load_ToolStripMenuItem"; load_ToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.L; - load_ToolStripMenuItem.Size = new Size(270, 34); + load_ToolStripMenuItem.Size = new Size(261, 34); load_ToolStripMenuItem.Text = "Загрузить"; load_ToolStripMenuItem.Click += load_ToolStripMenuItem_Click; // diff --git a/TrolleybusProject/TrolleybusProject/FormBusCollection.cs b/TrolleybusProject/TrolleybusProject/FormBusCollection.cs index 8c60c4a..aae2f7e 100644 --- a/TrolleybusProject/TrolleybusProject/FormBusCollection.cs +++ b/TrolleybusProject/TrolleybusProject/FormBusCollection.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.Logging; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; @@ -9,6 +10,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using TrolleybusProject.CollectionGenericObjects; using TrolleybusProject.Drawnings; +using TrolleybusProject.Exceptions; namespace TrolleybusProject; @@ -23,12 +25,18 @@ public partial class FormBusCollection : Form /// private AbstractCompany? _company = null; - public FormBusCollection() + /// + /// Логер + /// + private readonly ILogger _logger; + public FormBusCollection(ILogger logger) { InitializeComponent(); _storageCollection = new(); + _logger = logger; } + private void buttonAddBus_Click(object sender, EventArgs e) { BusConfig form = new(); @@ -37,18 +45,24 @@ public partial class FormBusCollection : Form } private void SetBus(DrawningBus bus) { - if (_company == null || bus == null) + try { - return; + if (_company == null || bus == null) + { + return; + } + if (_company + bus != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Добавлен объект: {0}", bus.GetDataForSave()); + } + } - if (_company + bus != -1) + catch (CollectionOverflowException ex) { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); - } - else - { - MessageBox.Show("Не удалось добавить объект"); + MessageBox.Show(ex.Message); + _logger.LogError($"Ошибка: {ex.Message}"); } } @@ -67,20 +81,30 @@ public partial class FormBusCollection : Form { return; } - if (MessageBox.Show("Удалить объект?", "Удаление", - MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) + + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } + int pos = Convert.ToInt32(maskedTextBox.Text); - if (_company - pos != null) + try { - MessageBox.Show("Объект удален"); - pictureBox.Image = _company.Show(); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + _logger.LogInformation("Удален объект по позиции " + pos); + } + else + { + MessageBox.Show($"Не удалось удалить объект"); + } } - else + catch (Exception ex) { - MessageBox.Show("Не удалось удалить объект"); + MessageBox.Show(ex.Message); + _logger.LogError("Ошибка: {Message}", ex.Message); } } @@ -90,13 +114,23 @@ public partial class FormBusCollection : Form { return; } + DrawningBus? bus = null; int counter = 100; while (bus == null) { - bus = _company.GetRandomObject(); - counter--; - + try + { + bus = _company.GetRandomObject(); + } + catch (ObjectNotFoundException) + { + counter--; + if (counter <= 0) + { + break; + } + } } if (bus == null) { @@ -122,10 +156,11 @@ public partial class FormBusCollection : Form private void buttonCollectionAdd_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBoxCollectionName.Text) || -(!radioButtonList.Checked && !radioButtonMassive.Checked)) + (!radioButtonList.Checked && !radioButtonMassive.Checked)) { MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogWarning("Не заполненная коллекция"); return; } CollectionType collectionType = CollectionType.None; @@ -137,10 +172,9 @@ public partial class FormBusCollection : Form { collectionType = CollectionType.List; } - _storageCollection.AddCollection(textBoxCollectionName.Text, - collectionType); + _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + _logger.LogInformation($"Добавлена коллекция: {textBoxCollectionName.Text}"); RerfreshListBoxItems(); - } /// /// Обновление списка в listBoxCollection @@ -159,19 +193,19 @@ public partial class FormBusCollection : Form } private void buttonCollectionDel_Click(object sender, EventArgs e) { - if (listBoxCollection.SelectedItem == null) return; - if (listBoxCollection.SelectedIndex < 0) + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) { MessageBox.Show("Коллекция не выбрана"); + _logger.LogWarning("Удаление невыбранной коллекции"); return; } - - + string name = listBoxCollection.SelectedItem.ToString() ?? string.Empty; if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + _logger.LogInformation($"Удалена коллекция: {name}"); RerfreshListBoxItems(); } @@ -181,6 +215,7 @@ public partial class FormBusCollection : Form if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) { MessageBox.Show("Коллекция не выбрана"); + _logger.LogWarning("Создание компании невыбранной коллекции"); return; } ICollectionGenericObjects? collection = @@ -188,6 +223,7 @@ public partial class FormBusCollection : Form if (collection == null) { MessageBox.Show("Коллекция не проинициализирована"); + _logger.LogWarning("Не удалось инициализировать коллекцию"); return; } switch (comboBoxSelectionCompany.Text) @@ -205,37 +241,47 @@ public partial class FormBusCollection : Form { if (saveFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.SaveData(saveFileDialog.FileName)) + try { + _storageCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation("Сохранение в файл: {filename}", + saveFileDialog.FileName); } - else + catch (Exception ex) { - MessageBox.Show("Не сохранилось", "Результат", + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } - } + + + private void load_ToolStripMenuItem_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.LoadData(openFileDialog.FileName)) + try { - MessageBox.Show("Успешно загружено", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _storageCollection.LoadData(openFileDialog.FileName); + MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation("Загрузка из файла: {filename}", saveFileDialog.FileName); RerfreshListBoxItems(); } - else + catch (Exception ex) { - MessageBox.Show("Не удалось загрузить", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); - + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } - } + + + } diff --git a/TrolleybusProject/TrolleybusProject/Program.cs b/TrolleybusProject/TrolleybusProject/Program.cs index 1b9f49a..fe2f22a 100644 --- a/TrolleybusProject/TrolleybusProject/Program.cs +++ b/TrolleybusProject/TrolleybusProject/Program.cs @@ -1,17 +1,40 @@ -namespace TrolleybusProject +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; + +namespace TrolleybusProject; + +internal static class Program { - internal static class Program + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { - /// - /// The main entry point for the application. - /// - [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 FormBusCollection()); - } + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + + ServiceCollection services = new(); + ConfigureServices(services); + using ServiceProvider serviceProvider = services.BuildServiceProvider(); + Application.Run(serviceProvider.GetRequiredService()); + } + private static void ConfigureServices(ServiceCollection services) + { + services + .AddSingleton() + .AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + var config = new ConfigurationBuilder() + .AddJsonFile("serilogConfig.json", optional: false, reloadOnChange: true) + .Build(); + option.AddSerilog(Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(config) + .CreateLogger()); + }); } } \ No newline at end of file diff --git a/TrolleybusProject/TrolleybusProject/TrolleybusProject.csproj b/TrolleybusProject/TrolleybusProject/TrolleybusProject.csproj index 244387d..b35dd3a 100644 --- a/TrolleybusProject/TrolleybusProject/TrolleybusProject.csproj +++ b/TrolleybusProject/TrolleybusProject/TrolleybusProject.csproj @@ -8,6 +8,20 @@ enable + + + + + + + + + + + + + + True @@ -23,4 +37,13 @@ + + + Always + + + Always + + + \ No newline at end of file diff --git a/TrolleybusProject/TrolleybusProject/nlog.config b/TrolleybusProject/TrolleybusProject/nlog.config new file mode 100644 index 0000000..5c71e85 --- /dev/null +++ b/TrolleybusProject/TrolleybusProject/nlog.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/TrolleybusProject/TrolleybusProject/serilogConfig.json b/TrolleybusProject/TrolleybusProject/serilogConfig.json new file mode 100644 index 0000000..e1e66a6 --- /dev/null +++ b/TrolleybusProject/TrolleybusProject/serilogConfig.json @@ -0,0 +1,20 @@ +{ + "Serilog": { + "Using": [ "Serilog.Sinks.File" ], + "MinimumLevel": "Information", + "WriteTo": [ + { + "Name": "File", + "Args": { + "path": "Logs/log_.log", + "rollingInterval": "Day", + "outputTemplate": "[{Timestamp:HH:mm:ss.fff}]{Level:u4}: {Message:lj}{NewLine}{Exception}" + } + } + ], + "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ], + "Properties": { + "Application": "Trolleybus" + } + } +} \ No newline at end of file