A ABP é uma estrutura de desenvolvimento da Web baseada no ASP.NET. Suas configurações de log e estrutura também são relativamente completas. Aqui, o editor do New Technology Channel apresentará em detalhes a configuração básica do gerenciamento de logs e a configuração do gerenciamento na estrutura da ABP. Amigos necessitados podem se referir a ele com cuidado!
Gerenciamento de log
Lado do servidor (lado do servidor)
O ASP.NET Boilerplate usa a Ferramenta de Logging da Castle Windsor e pode usar diferentes bibliotecas de classe de log, como: log4net, nlog, Serilog ... e assim por diante. Para todas as bibliotecas de classe de log, o Castle fornece uma interface geral para implementá -lo. Podemos facilmente lidar com várias bibliotecas de log especiais e é fácil substituir os componentes de log quando os negócios precisam dele.
Nota do tradutor: o que é o castelo: o castelo é um projeto de código aberto para a plataforma .NET, desde a estrutura de acesso a dados ORM a contêineres do IOC, até a estrutura do MVC e a AOP na camada da web, ela basicamente inclui tudo em todo o processo de desenvolvimento. O contêiner do IOC do ASP.NET Boilerplate é implementado através do Castle.
Log4Net é o componente da biblioteca de log mais popular no ASP.NET. O modelo de caldeira ASP.NET também usa o componente Log4Net Log Library. No entanto, implementamos a injeção de dependência do log4net através de apenas uma linha de código -chave (especificamente explicado no arquivo de configuração abaixo). Portanto, também é fácil substituí -lo pelo seu próprio componente de log.
Obtenha o Logger
Independentemente de qual componente da biblioteca de log você escolher, é o mesmo para fazer login através do código. (A queixa aqui, a interface iLogger universal do castelo é realmente incrível).
Vamos ao tópico: (Nota do tradutor: o código a seguir é o CASTLE.CORE.
1. Primeiro de tudo, precisamos lidar com o logger de objeto Logger primeiro. A estrutura de caldeira ASP.NET usa a tecnologia de injeção de dependência de dependência e podemos usar facilmente a injeção de dependência para gerar o registrador de objeto de registrador.
Em seguida, vamos dar uma olhada em como o ASP.NET Boilerplate implementa a função de registro:
usando castle.core.logging; // 1: O espaço para nomear para importar o log, castle.core.LoggingPublic Classe TaskAppService: iTaskAppService {// 2: Obtenha o objeto Logger através da injeção de dependência. Aqui, definimos primeiro um registrador de propriedades públicas do tipo ILogger, que é o objeto que usamos para gravar logs. Depois de criar o objeto TaskAppService (a tarefa definida em nosso aplicativo), ele é implementado por meio de injeção de atributos. public ilogger logger {get; definir; } public TaskAppService () {// 3: Se não houver logger, retorne o logger a uma instância vazia e não escreva o log. Esta é a melhor maneira de implementar a injeção de dependência, // se você não definir esse logger vazio, uma exceção será gerada quando obtivermos a referência do objeto e a instanciarmos. // faz isso, garante que o objeto não esteja vazio. Portanto, em outras palavras, sem a configuração de um madeireiro, o log não será gravado e um objeto nulo será retornado. // O objeto NullLogger não é nada vazio. Somente ao fazer isso, podemos garantir que as classes que definamos o trabalho normalmente quando instanciadas. Logger = nullLogger.instance; } public void CreateTask (entrada CreateTaskInput) {// 4: escreva para registrar logger.info ("Criando uma nova tarefa com descrição:" + input.Description); // TODO: salve a tarefa no banco de dados ...}} A cópia do código é a seguinte:Info 2014-07-13 13: 40: 23.360 [8] SimpleTaskSystem.Tasks.TaskAppService-Criando uma nova tarefa com descrição: Lembre-se de beber leite antes de dormir!
Depois de escrever no log, podemos visualizar o arquivo de log, assim como o seguinte formato:
Usando o Logger via classe baseA estrutura de caldeira ASP.NET fornece as classes base dos controladores MVC, controladores de API da Web e classes de serviço de aplicativos (os controladores e serviços de aplicativos que você definirá devem herdar as classes base de ASP.NET Boilerplate. Em outras palavras, quando os controladores da Web de Basem e a classe de APLIMENTO e o serviço de APLIMENT.ATRATE. Logger).
classe pública HomeController: SimpleTaskSystemControllerBase {public ActionResult Index () {Logger.debug ("uma mensagem de log de amostra ..."); return view (); }}Descrição: SimpleTaskSystemControllerBase Este controlador de classe base é o controlador de classe base que nos definimos e deve herdar do ABPController.
Dessa forma, o madeireiro pode funcionar normalmente. Obviamente, você também pode implementar sua própria classe base, para não usar mais a injeção de dependência.
Configuração
Se você gerar seu projeto através de modelos de caldeira ASP.NET no site oficial, todas as configurações do log4net serão geradas automaticamente.
O formato de configuração padrão é o seguinte:
• Nível de log: nível de registro de log, 5 depuração, informações, aviso, erro ou fatal.
• Data e hora: hora de registro.
• Número do thread: o número do thread quando cada linha de log é gravada.
• Nome do Logger: o nome do Logger, geralmente o nome da classe.
• Texto do log: o conteúdo do log que você escreveu.
Arquivo de configuração: log4net.config geralmente está localizado no diretório da web do projeto.
<? xml versão = "1.0" Encoding = "utf-8"?> <g4Net> <Appender name = "rollingFileAppender" type = "log4net.appender.rollingFileAppender"> <arquivo de arquivo = "Logs /logs.txt" /AppendTOfile /"True" /> value = "10" /> <maximumfilesize value = "10000kb" /> <staticLogFilename value = "true" /> <layout type = "log4net.layout.patternlayout"> <conversãopattern value = " %-5level %date [ %-5.5Thread] %-40.40GLERN- <Appender-ref Ref = "RollingFileAppender" /> <Nível Valor = "Debug" /> < /Root> <Nome do Logger = "Nhibernate"> <Nível Valor = "Warn" /> < /Logger> < /Log4Net>
O Log4Net é um componente de biblioteca de log muito poderoso e fácil de usar. Você pode escrever vários logs, como gravar em arquivos TXT, gravação em bancos de dados, etc. Você pode definir o nível mínimo de log, assim como a configuração acima para o Nibernate. Diferentes madeireiros escrevem toras diferentes, etc.
Para uso específico, consulte: http://logging.apache.org/log4net/release/config-examples.html
Finalmente, no arquivo global.asax do projeto, defina o arquivo de configuração do log4net:
classe pública MVCAPplication: abpwebApplication {substituição protegida void Application_start (remetente do objeto, EventArgs e) {iocmanager.instance.ioccontainer.addfacility <goggingfacility> (f => f.UseLog4Net (). comConfig ("Log4Net> base.application_start (remetente, e); }}Algumas linhas de código de chamada log4net, o componente de log. A biblioteca log4net no projeto está no pacote NUGET. Você também pode alterá -lo para outras bibliotecas de componentes de log, mas o código não precisa ser alterado. Porque, nossa estrutura implementa o registrador por meio de injeção de dependência!
Lado do cliente (cliente)
Finalmente, o que é ainda mais incrível é que você também pode chamar o registrador no lado do cliente. No lado do cliente, a estrutura de caldeira ASP.NET possui uma API de log JavaScript correspondente, o que significa que você pode gravar os logs do navegador, e o código de implementação é o seguinte:
abp.log.warn ('uma mensagem de log de amostra ...');Anexado: API do cliente JavaScript. O que você precisa explicar aqui é que você pode usar o console.log para produzir logs de saída no cliente, mas essa API não suporta necessariamente todos os navegadores e pode causar exceções ao seu script. Você pode usar nossa API, a nossa é segura e pode até sobrecarregar ou estender essas APIs.
abp.log.debug ('...'); abp.log.info ('...'); abp.log.warn ('...'); abp.log.error ('...'); abp.log.fatal ('...'); abp.log.fatal ('...');Gerenciamento de configurações
introduzir
Cada aplicativo precisa armazenar algumas configurações e usá -las em algum lugar do aplicativo. A estrutura ABP fornece uma poderosa infraestrutura que podemos definir no servidor ou cliente para armazenar/obter configurações de aplicativo, inquilino e no nível do usuário.
As configurações geralmente são armazenadas em um banco de dados (ou em outra fonte), representado pela estrutura correspondente à sequência de nomes-valor. Podemos converter valores de não cordão em valores de string para armazenamento.
Nota: Sobre a interface ISettingStore
Para usar o Gerenciamento de Configurações, a interface ISettingStore deve ser implementada. Você pode implementá-lo à sua maneira, e há implementações completas no projeto de módulo-zero a se referir.
Definir configurações
Você deve definir as configurações antes de usá -las. A estrutura ABP é um design modular, portanto, módulos diferentes podem ter configurações diferentes. Para definir as próprias configurações do módulo, cada módulo deve criar uma classe derivada herdada do SettingProvider. O exemplo do provedor de configuração é o seguinte:
public class MySettingProvider: SettingProvider {Public Substitua iEnumerable <SetingDefinition> getSettingDefinitions (SettingDefinitionProviderContext Context) {return new [] {new SettingDefinition ("SmtPerVeraddress", "127.0.0.1"), novo SettEfinition (SmtPerveraddress "," 127.0.0.1 "), novaDefinition" SettingScopes.Application |. }}O método getSettingDefinitions retorna o objeto SettingDefinition. O construtor da classe SettingDefinition possui os seguintes parâmetros:
• Nome (necessário): deve ter um nome exclusivo em todo o sistema. Uma maneira melhor é definir constantes de string para definir o nome.
• Valor padrão: define um valor padrão. Este valor pode ser nulo ou uma string vazia.
• Escopos: define o escopo da configuração (veja abaixo).
• Nome da exibição: uma sequência localizável para exibir posteriormente o nome definido na interface do usuário.
• Descrição: uma sequência localizável para exibir posteriormente a descrição das configurações na interface do usuário.
• Grupo: pode ser usado para configurar grupos. Isso é apenas para uso da interface do usuário e não é para definir gerenciamento.
• ISVISIBLETOCLIENTS: A configuração para TRUE disponibilizará as configurações no cliente.
Depois de criar o SettingProvider, devemos registrar nosso módulo no método PreIntialize:
Configuration.Settings.Providers.add <MsettingProvider> (); O provedor de configuração registra automaticamente a injeção de dependência. Portanto, o provedor de configuração pode injetar quaisquer dependências (como um repositório) para gerar alguma outra fonte da definição de configuração.
Defina o intervalo
Existem três configurações (ou níveis) definidas na enumeração do SettingScopes:
• Aplicativo: as configurações em todo o aplicativo são usadas para configurações independentes do usuário/inquilino. Por exemplo, podemos definir uma configuração chamada "smtpServeraddress" que obtém o endereço IP do servidor ao enviar um email. Se essa configuração tiver um único valor (não alterado com base no usuário), podemos defini -la como escopo do aplicativo.
• Inquilino: se o aplicativo for multi-inquilino, podemos definir configurações específicas do inquilino.
• Usuário: podemos usar configurações em todo o usuário para armazenar/obter valores definidos para cada usuário.
A enum do SettingScopes possui uma propriedade Flags, para que possamos definir uma configuração com vários escopos.
A faixa de configurações é hierárquica. Por exemplo, se definirmos o intervalo de configuração para "Aplicativo | inquilino | Usuário" e tentará obter o valor do conjunto atualmente;
• Obtemos o valor de um usuário específico se ele definir (reescrever) o usuário.
• Caso contrário, obtemos o valor específico do inquilino se ele definir (reescrever) o inquilino.
• Caso contrário, obtemos o valor do aplicativo se ele definir o aplicativo.
• Caso contrário, obtemos o valor padrão.
O valor padrão pode ser nulo ou uma string vazia. Se possível, é recomendável fornecer um valor padrão para as configurações.
Obtenha o valor definido
Depois de definir as configurações, podemos obter seu valor atual no servidor e no cliente.
(1) Lado do servidor
O ISETTINGMANAGER é usado para executar configurações. Podemos injetar e usá -lo em qualquer lugar do aplicativo. ISettingManager define muitos métodos para obter valores definidos.
O método mais usado é o getSettingValue (ou getSettingValuEasync é uma chamada assíncrona). Ele retorna o valor definido atualmente com base no intervalo de configurações padrão, aplicativo, inquilino e de usuário (conforme descrito no parágrafo antes da faixa de definição). exemplo:
// obtendo um valor booleano (chamada assíncrona) var value1 = aguarda de setembro
GetSettingValue possui versões genéricas e assíncronas, como mostrado acima. Também existem maneiras de obter uma lista de configurações para um inquilino ou usuário específico ou para todas as configurações.
Como o isettingManager é amplamente utilizado, algumas classes base específicas (como Applicationservice, Domainservice e ABPController) têm uma propriedade chamada SettingManager. Se herdarmos dessas classes, não há necessidade de injetar explicitamente.
(2) cliente
Se o ISVISBLETOCLIENTS estiver definido como true ao definir as configurações, você poderá obter seu valor atual usando JavaScript no cliente. ABP.Setting O espaço para nome define as funções e objetos necessários. Exemplo:
var currentColor = abp.setting.get ("sitecolorspreeference"); Também existem métodos como Getint e GetBoolean. Você pode usar o objeto abp.setting.Values para obter todos os valores. Observe que, se você alterar as configurações do lado do servidor, o cliente não saberá sobre essa alteração, a menos que a página seja atualizada ou recarregada de alguma forma ou atualizada manualmente via código.
Alterar configurações
O ISettingManager define os métodos Mudança de ApplicationAsync, Mudança de Campações e Monthsync e Mudanças (e a versão síncrona) para alterar as configurações do aplicativo, inquilino e usuário separadamente.
Sobre cache
O cache está no gerenciamento de configurações do lado do servidor; portanto, não devemos usar diretamente a instrução Repositório ou Atualização do banco de dados para alterar o valor definido.
O acima exposto é uma introdução detalhada à configuração básica do gerenciamento de logs e gerenciamento de configurações na estrutura ABP compilada pelo editor do FOOXIN Technology Channel. Espero que seja útil para todos aprenderem esse conhecimento. Para mais conteúdo, continue prestando atenção ao FOOXIN Technology Channel!