ABP는 ASP.NET을 기반으로하는 웹 개발 프레임 워크입니다. 로그 및 프레임 워크 설정도 비교적 완성됩니다. 여기에서 새로운 기술 채널의 편집자는 ABP 프레임 워크에서 로그 관리 및 설정 관리의 기본 구성을 자세히 소개합니다. 도움이 필요한 친구들은 그것을 신중하게 언급 할 수 있습니다!
로그 관리
서버 측 (서버 측)
ASP.NET BoilerPlate은 Castle Windsor의 로깅 시설 로깅 도구를 사용하며 Log4Net, NLOG, Serilog ... 등과 같은 다른 로그 클래스 라이브러리를 사용할 수 있습니다. 모든 로그 클래스 라이브러리의 경우 Castle은이를 구현하기위한 일반적인 인터페이스를 제공합니다. 우리는 다양한 특수 로그 라이브러리를 쉽게 처리 할 수 있으며 비즈니스가 필요할 때 로그 구성 요소를 쉽게 대체 할 수 있습니다.
번역기 주 : Castle : Castle은 데이터 액세스 프레임 워크 ORM에서 IOC 컨테이너, MVC 프레임 워크 및 웹 계층의 AOP에 이르기까지 .NET 플랫폼의 오픈 소스 프로젝트입니다. 기본적으로 전체 개발 프로세스의 모든 것을 포함합니다. ASP.NET 보일러 플레이트의 IOC 컨테이너는 성을 통해 구현됩니다.
Log4Net은 ASP.NET에서 가장 인기있는 로그 라이브러리 구성 요소입니다. ASP.NET 보일러 플레이트 템플릿은 또한 Log4Net Log 라이브러리 구성 요소를 사용합니다. 그러나 키 코드의 한 줄 (특히 아래 구성 파일에 설명)을 통해 Log4Net 종속성 주입을 구현합니다. 따라서 자신의 로그 구성 요소로 쉽게 교체 할 수 있습니다.
로거를 얻으십시오
선택한 로그 라이브러리 구성 요소에 관계없이 코드를 통과하는 것과 동일합니다. (여기서 불만, Castle 's Universal Ilogger 인터페이스는 정말 대단합니다).
주제에 접근합시다 : (번역기 주 : 다음 코드는 Castle.core 소스 코드 분석 및 ABP 프레임 워크의 구현)입니다.
1. 우선, 우리는 먼저 로거 객체 로거를 다루어야합니다. ASP.NET 보일러 플레이트 프레임 워크는 종속성 주입 종속성 주입 기술을 사용하며 종속성 주입을 쉽게 사용하여 Logger Object Logger를 생성 할 수 있습니다.
다음으로 ASP.NET BoilerPlate이 로깅 기능을 구현하는 방법을 살펴 보겠습니다.
Castle.core.logging 사용; // 1 : log, castle.core.loggingpublic class taskappservice를 가져 오기위한 네임 스페이스 : itaskAppService {// 2 : 종속성 주입을 통해 로거 객체를 가져옵니다. 여기서는 먼저 로그를 기록하는 데 사용하는 객체 인 Ilogger 유형의 공공 부동산 로거를 정의합니다. TaskAppService 객체 (응용 프로그램에 정의 된 작업)를 작성한 후 속성 주입을 통해 구현됩니다. 공개 Ilogger Logger {get; 세트; } public taskappservice () {// 3 : 로거가없는 경우 로거를 빈 인스턴스로 되돌리고 로그를 쓰지 마십시오. 이것은 종속성 주입을 구현하는 가장 좋은 방법입니다. //이 빈 로거를 정의하지 않으면 객체 참조를 가져 와서 인스턴스화 할 때 예외가 생성됩니다. // 그렇게하면 객체가 비어 있지 않도록합니다. 다시 말해, 로거를 설정하지 않고 로그는 기록되지 않으며 널 객체가 반환됩니다. // nulllogger 객체는 실제로 아무것도 비어 있습니다. 이렇게하면 우리가 인스턴스화 될 때 우리가 정의하는 클래스가 정상적으로 정의되는지 확인할 수 있습니다. logger = nulllogger.instance; } public void createTask (createTaskInput input) {// 4 : logger.info에 쓸 수 있습니다. // TODO : 데이터베이스에 작업 저장 ...}} 코드 사본은 다음과 같습니다.정보 2014-07-13 13 : 40 : 23,360 [8] SimpletaskSystem.tasks.taskAppService- 설명이 포함 된 새로운 작업 만들기 : 자고 전에 우유를 마시는 것을 기억하십시오!
로그에 글을 쓰면 다음 형식과 마찬가지로 로그 파일을 볼 수 있습니다.
기본 클래스를 통해 로거 사용ASP.NET 보일러 플레이트 프레임 워크는 MVC 컨트롤러, 웹 API 컨트롤러 및 애플리케이션 서비스 클래스의 기본 클래스를 제공합니다 (정의하는 컨트롤러 및 애플리케이션 서비스는 ASP.NET 보일러 플레이트의 기본 클래스를 상속해야합니다. 즉, 사용자 정의 된 웹 API 컨트롤러, MVC 컨트롤러 및 애플리케이션 서비스 클래스는 모두 ASP.NET 보일러에 해당 할 수 있습니다.
공개 클래스 HomeController : SimpleTaskSystemControllerBase {public actionResult index () {logger.debug ( "샘플 로그 메시지 ..."); return view (); }}설명 : SimpleTaskSystemControllerBase이 기본 클래스 컨트롤러는 우리가 스스로 정의하는 기본 클래스 컨트롤러이며 ABPController에서 상속해야합니다.
이런 식으로 로거는 정상적으로 작동 할 수 있습니다. 물론 자신의 기본 클래스를 구현할 수도 있으므로 더 이상 종속성 주입을 사용할 수 없습니다.
구성
공식 웹 사이트에서 ASP.NET BoilerPlate 템플릿을 통해 프로젝트를 생성하는 경우 Log4Net의 모든 구성이 자동으로 생성됩니다.
기본 구성 형식은 다음과 같습니다.
• 로그 레벨 : 로그 녹화 레벨, 5 디버그, 정보, 경고, 오류 또는 치명적입니다.
• 날짜 및 시간 : 로깅 시간.
• 스레드 번호 : 스레드 번호 각 로그 라인이 작성 될 때.
• 로거 이름 : 로거의 이름, 일반적으로 클래스 이름입니다.
• 로그 텍스트 : 작성한 로그 컨텐츠.
구성 파일 : log4net.config는 일반적으로 프로젝트 웹 디렉토리에 있습니다.
<? xml version = "1.0"alcoding = "utf-8"?> <log4net> <appender name = "RollingFileAppender"type = "log4net.appender.rollingFileAppender"> <file value = "logs /logss.txt" /> <allingStyle value = "rollingstyle value =" /> <maxsogerbachs ""10 " <maximumFilesize value = "10000kb" /> <staticLogFilename value = "true" /> <layout type = "log4net.layout.patternlayout"> <conversionpattern value = " %-5level %date [ %-5.5thread] %-40.40logger- %newline" /> < /layout> < /layout> < /layout> < /layout> < /layout> ref = "RollingFileAppender" /> <레벨 값 = "Debug" /> < /root> <logger name = "nhibernate"> <level value = "warn" /> < /logger> < /log4net>
Log4Net은 매우 강력하고 사용하기 쉬운 로그 라이브러리 구성 요소입니다. TXT 파일 쓰기, 데이터베이스 작성 등과 같은 다양한 로그를 작성할 수 있습니다. 위의 NHibernate 구성과 마찬가지로 최소 로그 레벨을 설정할 수 있습니다. 다른 로거는 다른 로그 등을 씁니다.
특정 사용은 http://logging.apache.org/log4net/release/config-examples.html을 참조하십시오
마지막으로, 프로젝트의 Global.asax 파일에서 log4net 구성 파일을 정의하십시오.
공개 클래스 mvcapplication : abpwebapplication {protected void application_start (객체 발신자, eventargs e) {iocmanager.instance.ioccontainer.addfacility <loggingfacility> (f => f.uselog4net (). withconfig ( "log4net.config"); base.application_start (sender, e); }}로깅 구성 요소 인 Log4net을 호출하는 코드 몇 줄. 프로젝트의 log4net 라이브러리는 Nuget 패키지에 있습니다. 다른 로그 구성 요소 라이브러리로 변경할 수도 있지만 코드를 변경할 필요는 없습니다. 우리의 프레임 워크는 종속성 주입을 통해 로거를 구현하기 때문입니다!
클라이언트 측 (클라이언트)
마지막으로, 더 놀라운 것은 클라이언트 쪽의 로거를 호출 할 수 있다는 것입니다. 클라이언트 측에서 ASP.NET BoilerPlate 프레임 워크에는 해당 JavaScript Log API가 있습니다. 즉, 브라우저의 로그를 기록 할 수 있으며 구현 코드는 다음과 같습니다.
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 ( '...');
설정 관리
소개하다
각 응용 프로그램은 일부 설정을 저장하고 응용 프로그램 어딘가에 사용해야합니다. ABP 프레임 워크는 서버 또는 클라이언트를 설정하여 응용 프로그램, 테넌트 및 사용자 수준 구성을 저장/GET로 설정할 수있는 강력한 인프라를 제공합니다.
설정은 일반적으로 이름 값 문자열에 해당하는 구조로 표시되는 데이터베이스 (또는 다른 소스)에 저장됩니다. 비 스트링 값을 스토리지의 문자열 값으로 변환 할 수 있습니다.
참고 : isettingstore 인터페이스에 대해
설정 관리를 사용하려면 isettingstore 인터페이스를 구현해야합니다. 당신은 당신의 자신의 방식으로 그것을 구현할 수 있으며, Module-Zero 프로젝트에 참조 할 수있는 완전한 구현이 있습니다.
설정을 정의합니다
설정을 사용하기 전에 설정을 정의해야합니다. ABP 프레임 워크는 모듈 식 디자인이므로 다른 모듈마다 다른 설정을 가질 수 있습니다. 모듈의 자체 설정을 정의하기 위해 각 모듈은 SettingProvider에서 상속 된 파생 클래스를 생성해야합니다. 설정 제공자 예제는 다음과 같습니다.
Public Class MySettingProvider : SettingProvider {public override ienumerable <settingDefinition> getSettingDefinitions (settingDefinitionProviderContext Context) {return new [] {New SetterDefinition ( "smtpserverAddress", "127.0.1"), Tualive ( "SupiveUsercanUsen" 스코프 : SetingsCopes.Application | SettingScopes.tenant), 새로운 SettingEdefinition ( "SiteColorPreference", "Red", Scopes : SetingScopes.user, IsvisibleToclients : True)}; }}getSettingDefinitions 메소드는 SettingEdefinition 객체를 반환합니다. SetteDefinition 클래스의 생성자에는 다음 매개 변수가 있습니다.
• 이름 (필수) : 전체 시스템에 고유 한 이름이 있어야합니다. 더 좋은 방법은 문자열 상수를 정의하여 이름을 설정하는 것입니다.
• 기본값 : 기본값을 설정합니다. 이 값은 널 또는 빈 문자열 일 수 있습니다.
• 스코프 : 설정 범위를 정의합니다 (아래 참조).
• 디스플레이 이름 : 나중에 UI에 설정 이름을 표시하기위한 로컬라이즈 가능한 문자열.
• 설명 : 나중에 UI의 설정에 대한 설명을 표시하기위한 현지화 가능한 문자열.
• 그룹 : 그룹을 설정하는 데 사용할 수 있습니다. 이것은 UI 사용을위한 것이며 설정 관리를위한 것이 아닙니다.
• isvisibletoclients : true로 설정하면 클라이언트에서 설정을 사용할 수 있습니다.
SettingProvider를 만든 후에는 모듈을 preintialize 메소드에 등록해야합니다.
configuration.settings.providers.add <mysettingprovider> (); 설정 제공자는 자동으로 종속성 주입을 등록합니다. 따라서 설정 제공 업체는 종속성 (예 : 저장소)을 주입하여 설정 정의의 다른 소스를 생성 할 수 있습니다.
범위를 설정하십시오
SettingScopes enum에 정의 된 세 가지 설정 (또는 레벨)이 있습니다.
• 응용 프로그램 : 응용 프로그램 전체 설정은 사용자/테넌트 독립 설정에 사용됩니다. 예를 들어, 이메일을 보낼 때 서버의 IP 주소를 가져 오는 "smtpserveraddress"라는 설정을 정의 할 수 있습니다. 이 설정에 단일 값 (사용자에 따라 변경되지 않음)이 있으면 응용 프로그램 범위로 정의 할 수 있습니다.
• 임차인 : 응용 프로그램이 다중 테넌트 인 경우 임차인 별 설정을 정의 할 수 있습니다.
• 사용자 : 사용자 전체 설정을 사용하여 각 사용자의 값을 저장/얻을 수 있습니다.
SettingScopes enum에는 플래그 속성이 있으므로 여러 스코프가있는 설정을 정의 할 수 있습니다.
설정 범위는 계층 적입니다. 예를 들어, 설정 범위를 "응용 프로그램 | 테넌트 | 사용자"로 정의하고 현재 설정된 값을 얻으려고 시도하는 경우;
• 특정 사용자가 사용자를 정의 (다시 작성)하면 특정 사용자의 값을 얻습니다.
• 그렇지 않은 경우 특정 임차인 값이 임차인을 정의하는 경우 (재 작성) 임차인 값을 얻습니다.
• 그렇지 않은 경우 응용 프로그램이 응용 프로그램을 정의하면 응용 프로그램의 값을 얻습니다.
• 그렇지 않은 경우 기본값을 얻습니다.
기본값은 null 또는 빈 문자열 일 수 있습니다. 가능하면 설정에 기본값을 제공하는 것이 좋습니다.
설정 값을 얻으십시오
설정을 정의한 후 서버 및 클라이언트에서 현재 값을 얻을 수 있습니다.
(1) 서버 측
isettingmanager는 설정을 수행하는 데 사용됩니다. 응용 프로그램의 어느 곳에서나 주입하여 사용할 수 있습니다. isettingmanager는 설정 값을 얻기위한 많은 방법을 정의합니다.
가장 일반적으로 사용되는 방법은 GetSettingValue입니다 (또는 GetSettingValueAsync는 비동기 호출입니다). 기본값, 응용 프로그램, 테넌트 및 사용자 설정 범위를 기준으로 현재 설정된 값을 반환합니다 (설정 범위 전 문 단락에 설명 된대로). 예:
//Getting a boolean value (async call)var value1 = await SettingManager.GetSettingValueAsync<bool>("PassiveUsersCanNotLogin");//Getting a string value (sync call)var value2 = SettingManager.GetSettingValue("SmtpServerAddress");GetSettingValue는 위에 표시된 것처럼 일반 및 비동기 버전을 가지고 있습니다. 특정 임차인 또는 사용자 또는 모든 설정에 대한 설정 목록을 얻는 방법도 있습니다.
isettingmanager가 널리 사용되기 때문에 일부 특정 기본 클래스 (예 : ApplicationService, Domainservice 및 ABPController)에는 SettingManager라는 속성이 있습니다. 이 수업에서 상속되면 명시 적으로 주입 할 필요가 없습니다.
(2) 클라이언트
설정을 정의 할 때 iSvisibleToclients가 True로 설정된 경우 클라이언트에서 JavaScript를 사용하여 현재 값을 얻을 수 있습니다. ABP. 네임 스페이스 설정 필수 기능과 객체를 정의합니다. 예:
var currentColor = abp.setting.get ( "sitecolorpreference"); getint 및 getboolean과 같은 방법도 있습니다. abp.setting.values 객체를 사용하여 모든 값을 얻을 수 있습니다. 서버 측에서 설정을 변경하면 클라이언트는 페이지를 어떤 식 으로든 새로 고치거나 다시로드하지 않거나 코드를 통해 수동으로 업데이트되지 않는 한이 변경 사항에 대해 알지 못합니다.
설정 설정
isettingmanager는 응용 프로그램, 테넌트 및 사용자의 설정을 개별적으로 변경하기 위해 ChangesttingTingtingForPictationAsync 및 ChangeSettingForUserAsync 메소드 (및 동기 버전)를 정의합니다.
캐시 정보
캐시는 서버 측 설정 관리에 있으므로 저장소 또는 데이터베이스 업데이트 문을 직접 사용하여 설정 값을 변경해서는 안됩니다.
위의 것은 Fooxin Technology Channel의 편집자가 편집 한 ABP 프레임 워크에서 로그 관리 및 설정 관리의 기본 구성에 대한 자세한 소개입니다. 모든 사람 이이 지식을 배우는 것이 도움이되기를 바랍니다. 자세한 내용은 Fooxin Technology Channel에 계속주의를 기울이십시오!