ABP - это веб -разработка, основанная на ASP.NET. Его настройки журнала и фреймворта также являются относительно полными. Здесь редактор нового технологического канала будет подробно представить основную конфигурацию управления журналами и настройки управления в рамках ABP. Друзья в нуждающихся могут осторожно ссылаться на это!
Управление журналом
Серверная сторона (сторона сервера)
ASP.NET CoalerPlate использует инструмент ведения журнала Windsor Windsor, и может использовать различные библиотеки классов журнала, такие как: log4net, NLOG, Serilog ... и так далее. Для всех библиотек классов журнала Castle предоставляет общий интерфейс для его реализации. Мы можем легко обрабатывать различные специальные библиотеки журналов, и легко заменить компоненты журнала, когда бизнеса нуждается в этом.
Примечание переводчика: что такое Castle: Castle - это проект с открытым исходным кодом для платформы .NET, от структуры доступа к данным ORM до контейнеров IOC, до структуры MVC и AOP на веб -уровне, он в основном включает в себя все во всем процессе разработки. Контейнер IOC с шаблоном ASP.NET реализован через замок.
Log4net - самый популярный компонент библиотеки журналов под ASP.NET. Шаблон шаблона ASP.NET Cowerplate также использует компонент библиотеки журнала log4net. Тем не менее, мы реализуем инъекцию зависимости log4net только через одну строку кода клавиши (специально объясняется в файле конфигурации ниже). Следовательно, также легко заменить его собственным компонентом журнала.
Получите регистратор
Независимо от того, какой компонент библиотеки журналов вы выберете, он тот же для регистрации через код. (Жалоба здесь, универсальный интерфейс Ilogger от Castle действительно потрясающий).
Давайте перейдем к теме: (Примечание переводчика: следующим кодом является анализ и реализацию исходного кода Castle.core и реализация структуры ABP)
1. Прежде всего, нам нужно сначала справиться с регистратором объекта Logger. В рамках паттерной пластины ASP.NET используется технология впрыска зависимостей, и мы можем легко использовать инъекцию зависимостей для генерации логгера объекта Logger.
Далее, давайте посмотрим, как ASP.NET Cowerplate реализует функцию ведения журнала:
Использование CASTLE.CORE.Logging; // 1: Пространство имен для импорта журнала, castle.core.loggingPublic Class TaskAppService: itaskAppService {// 2: Получить объект Logger через инъекцию зависимости. Здесь мы сначала определяем регистратор публичных свойств типа Ilogger, который является объектом, который мы используем для записи журналов. После создания объекта TaskAppService (задачи, определенной в нашем приложении), он реализуется посредством инъекции атрибутов. Public Ilogger Logger {get; набор; } public TaskAppService () {// 3: Если нет регистратора, верните журнал в пустой экземпляр и не пишите журнал. Это лучший способ внедрить инъекцию зависимости, // Если вы не определяете этот пустой регистратор, будет создано исключение, когда мы получаем ссылку на объект и экземпляруйте его. // Делая это гарантирует, что объект не пуст. Таким образом, другими словами, без настройки журнала, журнал не будет записан, и нулевой объект будет возвращен. // Объект Nulllogger на самом деле ничто, пусто. Только при этом мы можем гарантировать, что классы, которые мы определяем, работают обычно при создании. Logger = nulllogger.instance; } public void createTask (createTaskInput Input) {// 4: записать в logger.info («Создание новой задачи с описанием:" + input.description); // todo: Сохранить задачу в базу данных ...}} Кода -копия выглядит следующим образом:Информация 2014-07-13 13: 40: 23,360 [8] SimpleTaskSystem.tasks.taskappService-Создание новой задачи с описанием: Не забудьте пить молоко перед сном!
После написания в журнал мы можем просмотреть файл журнала, как и в следующем формате:
Использование регистратора через базовый классСтруктура Boilerplate ASP.NET предоставляет базовые классы контроллеров MVC, контроллеров Web API и классов службы приложений (контроллеры и службы приложений, которые вы определяете, должны наследовать базовые классы ASP.NET Boilerplate. Другими словами, когда ваши настраиваемые контроллеры API -API, контроллеры MVC и классы службы применения, все это унаследовали классы базовых, соответствующие котелке ASP.NENT.
открытый класс HomeController: SimpleTaskSyStemControllerBase {public actionResult index () {logger.debug («Пример журнала сообщения ...»); return view (); }}Описание: SimpleTaskSyStemControllerBase Этот контроллер базового класса - контроллер базового класса, который мы определяем, и он должен наследовать от AbpController.
Таким образом, регистратор может работать нормально. Конечно, вы также можете внедрить свой собственный базовый класс, чтобы вы больше не могли использовать инъекцию зависимости.
Конфигурация
Если вы генерируете свой проект через шаблоны ASP.NET Coiperplate на официальном веб -сайте, автоматически генерируются все конфигурации log4net.
Формат конфигурации по умолчанию выглядит следующим образом:
• Уровень журнала: уровень записи журнала, 5 отладка, информация, предупреждение, ошибка или фатальный.
• Дата и время: время регистрации.
• Номер потока: номер потока, когда записана каждая строка журнала.
• Имя журнала: Имя журнала, обычно имя класса.
• Текст журнала: содержимое журнала, которое вы написали.
Файл конфигурации: log4net.config обычно расположен в веб -каталоге проекта.
<?xml version="1.0" encoding="utf-8" ?><log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" > <file value="Logs/Logs.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <MaximumFileSize value = "10000KB" /> <staticLogFilEname value = "true" /> <layout type = "log4net.layout.patternlayout"> <conversionPattern value = " %-5level %Date [ %-5.5thread] %-40.40LGER- %Сообщение %Новое. ref = "RollingFileAppender" /> <value = "Debug" /> < /root> <name = "nhibernate"> <value = "warn" /> < /logger> < /log4net>
Log4net-очень мощный и простой в использовании компонент библиотеки журналов. Вы можете написать различные журналы, такие как написание в файлы TXT, записать в базы данных и т. Д. Вы можете установить минимальный уровень журнала, как и вышеуказанная конфигурация для nhibernate. Разные регистраторы пишут разные журналы и т. Д.
Для конкретного использования, пожалуйста, см.
Наконец, в файле Global.asax проекта определите файл конфигурации log4net:
Открытый класс mvcapplication: abpwebapplication {Защищенный переопределение void application_start (отправитель объекта, Eventargs e) {iocmanager.instance.ioccontainer.addfacility <loggingfacility> (f => f.uselog4net (). withconfig ("log4net.config"); base.application_start (отправитель, E); }}Несколько строк кодового вызова log4net, компонент журнала. Библиотека Log4net в проекте находится в пакете Nuget. Вы также можете изменить его на другие библиотеки компонентов журнала, но код не нужно изменять. Потому что наша структура реализует регистратор через инъекцию зависимости!
Клиентская сторона (клиент)
Наконец, что еще более удивительно, так это то, что вы также можете позвонить в журнал на стороне клиента. На стороне клиента в платформе ASP.NET BoilerPlate имеет соответствующий API журнала JavaScript, что означает, что вы можете записать журналы браузера, а код реализации выглядит следующим образом:
abp.log.warn ('образец журнала сообщения ...');Прилагается: клиент JavaScript API. Вам нужно объяснить здесь, так это то, что вы можете использовать console.log для вывода журналов на клиенте, но этот API не обязательно поддерживает все браузеры и может вызвать исключения из вашего сценария. Вы можете использовать наш API, наш безопасен, и вы даже можете перегрузить или расширить эти API.
abp.log.debug ('...'); abp.log.info ('...'); abp.log.warn ('...'); abp.log.error ('...'); abp.log.fatal ('...'); abp.log.fatal ('...');Управление настройками
представлять
Каждое приложение должно хранить некоторые настройки и использовать их где -то в приложении. Framework ABP обеспечивает мощную инфраструктуру, которую мы можем установить на сервере или клиенте для хранения/получения приложений, арендаторов и конфигураций на уровне пользователя.
Настройки обычно хранятся в базе данных (или другом источнике), представленной структурой, соответствующей строке name-value. Мы можем преобразовать не строгие значения в строковые значения для хранения.
Примечание: о интерфейсе isettingstore
Чтобы использовать управление параметрами, должен быть реализован интерфейс IsettingStore. Вы можете реализовать его по-своему, и в проекте Module-Zero есть полные реализации.
Определите настройки
Вы должны определить настройки перед их использованием. Framework ABP - это модульная конструкция, поэтому разные модули могут иметь разные настройки. Чтобы определить собственные настройки модуля, каждый модуль должен создать полученный класс, унаследованный от настройки Provider. Пример поставщика настройки заключается в следующем:
public class MySettingProvider : SettingProvider{ public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context) { return new[] { new SettingDefinition( "SmtpServerAddress", "127.0.0.1" ), new SettingDefinition( "PassiveUsersCanNotLogin", "true", scopes: STUTICSCOPES.Application |. }}Метод GetSettingDefinitions возвращает объект настроек. Конструктор класса настройки имеет следующие параметры:
• Имя (требуется): должно иметь уникальное имя во всей системе. Лучшим способом является определение строковых константов для установки имени.
• Значение по умолчанию: устанавливает значение по умолчанию. Это значение может быть нулевой или пустой строкой.
• Области: определяет область настройки (см. Ниже).
• Отображение имени: локализационная строка для дальнейшего отображения имени набора в пользовательском интерфейсе.
• Описание: локализационная строка для дальнейшего отображения описания настроек в пользовательском интерфейсе.
• Группа: может использоваться для настройки групп. Это только для использования пользовательского интерфейса и не для установки управления.
• Isvisibletoclients: настройка на True сделает настройки доступными на клиенте.
После создания настройки Provider мы должны зарегистрировать наш модуль в методе Preintialize:
Configuration.Settings.Providers.Add <MySettingProvider> (); Поставщик настроек автоматически регистрирует инъекцию зависимости. Следовательно, поставщик настроек может вводить любые зависимости (например, репозиторий) для создания некоторого другого источника определения установки.
Установите диапазон
Есть три настройки (или уровни), определенные в переходе на FettingScopes:
• Приложение: Настройки всего приложения используются для независимых настроек пользователя/арендатора. Например, мы можем определить настройку под названием «smtpserveraddress», который получает IP -адрес сервера при отправке электронной почты. Если этот параметр имеет одно значение (не измененное на основе пользователя), то мы можем определить его как область приложения.
• Арендатор: если приложение является мультитенантом, мы можем определить настройки, специфичные для арендатора.
• Пользователь: мы можем использовать настройки всего пользователя для хранения/получения значений установки для каждого пользователя.
У Enum FundScopes есть свойство флагов, поэтому мы можем определить настройку с несколькими областями.
Диапазон настроек иерархичен. Например, если мы определим диапазон настроек для «Приложение | Арендатор | Пользователь» и попытаемся получить значение установленного в настоящее время;
• Мы получаем значение конкретного пользователя, если он определяет (переписывает) пользователя.
• Если нет, мы получаем конкретное значение арендатора, если он определяет (переписывает) арендатора.
• Если нет, мы получаем значение приложения, если оно определяет приложение.
• Если нет, мы получаем значение по умолчанию.
Значение по умолчанию может быть нулевой или пустой строкой. Если возможно, рекомендуется предоставить значение по умолчанию для настроек.
Получите установленное значение
После определения настроек мы можем получить его текущее значение на сервере и клиенте.
(1) Серверная сторона
IsettingManager используется для выполнения настроек. Мы можем вводить и использовать его в любом месте приложения. IsettingManager определяет много методов, чтобы получить установленные значения.
Наиболее часто используемым методом является getSettingValue (или getSettingValueAsync - это асинхронный вызов). Он возвращает в данный момент установленное значение на основе диапазона по умолчанию, приложениям, арендаторам и настройкам пользователей (как описано в абзаце перед диапазоном настройки). пример:
// Получение логического значения (Async Call) var value1 = await stineManager.getSettingValueAsync <bool> ("passiveSersCannotlogin"); // Получение строкового значения (sync Call) var value2 = settingManager.getSettingValue ("smtpserVerdDress");GetSettingValue имеет общие и асинхронные версии, как показано выше. Есть также способы получить список настроек для конкретного арендатора или пользователя или всех настроек для него.
Поскольку широко используется IsettingManager, некоторые конкретные базовые классы (такие как ApplicationService, Domainservice и AbpController) имеют свойство под названием STANEMANER. Если мы наследуем от этих классов, нет необходимости явно вводить его.
(2) Клиент
Если Isvisibletoclients установлены на True при определении настроек, вы можете получить его текущее значение, используя JavaScript на клиенте. ABP.Seting Пространство имен определяет необходимые функции и объекты. Пример:
var currentColor = abp.setting.get ("sitecolorpreference"); Есть также такие методы, как GetInt и GetBoolean. Вы можете использовать объект abp.setting.values, чтобы получить все значения. Обратите внимание, что если вы измените настройки на стороне сервера, клиент не узнает об этом изменении, если страница не обновляется или не перезагружена каким -либо образом или не обновляется вручную через код.
Изменить настройки
IsettingManager определяет изменения в сфере hairtingtingforplicationAsync, изменения в методах изменений и изменений и изменений в методах (и синхронной версии), чтобы изменить настройки приложения, арендатора и пользователя отдельно.
О кеше
Кэш находится в управлении настройками на стороне сервера, поэтому мы не должны напрямую использовать оператор репозитория или обновления базы данных, чтобы изменить установленное значение.
Выше приведено подробное введение в базовую конфигурацию управления журналами и настройки управления в рамках ABP, составленной редактором канала технологии Fooxin. Я надеюсь, что для всех будет полезно изучить эти знания. Для получения дополнительного контента, пожалуйста, продолжайте обращать внимание на канал Fooxin Technology!