ASP.NET Core Logs

Diferente do ASP “comum”, o ASP.NET Core nos possibilita diversas novas funções, dentre elas o ASP.NET Core Logs, que são os logs de erro, para a identificação de erros relacionados a execução da sua aplicação ASP.NET core. Sobre o uso de ASP.NET Core em nossa estrutura, clique aqui.

Uma aplicação ASP.NET Core é caracterizada por utilizar uma linha conforme abaixo no arquivo de configuração da sua aplicação, web.config:

<pre>
<aspNetCore processPath="dotnet"
    arguments=".\nome-projeto.dll"
    stdoutLogEnabled="false"
    stdoutLogFile=".\logs\stdout"
</pre>

Como ativar o ASP.NET Core Logs

Neste conjunto de passos é explicado como é feita a ativação dos logs:

1 – Crie uma pasta chamada logs no mesmo nível do web.config;

2 – Alterar o campo “stdoutLogEnabled” de “false” para “true” no arquivo web.config;

3 – Caso não exista essa informação, adicione mais código a este campo de modo que fique da seguinte forma:

<pre>
<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile=".\logs\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
    <handlerSetting name="debugLevel" value="FILE,TRACE" />
  </handlerSettings>
</aspNetCore>

</pre>

4 – Após isto, quando a aplicação for acessada serão criados arquivos dentro do diretório de log com o prefixo “stdout“.

Uma vez que se possui os logs é possível analisar de forma detalhada as causas para o erro que esteja ocorrendo na aplicação.

Exemplos de erros comuns que podem ocorrer:

1) Failed to determine the https port for redirect.

O erro em questão no log fica desta forma:

warn: Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository[50] Using an in-memory repository. Keys will not be persisted to storage.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[59] Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits.
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] No XML encryptor configured. Key {b899dba6-409b-4aba-ad7f-9f6c1554d98f} may be persisted to storage in unencrypted form.
Hosting environment: Production
Content root path: d:\web\localuser\horticon\www\api
Now listening on: http://127.0.0.1:27066
Application started. Press Ctrl+C to shut down.
warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
Application is shutting down…

Este erro ocorre devido o domínio não possuir o HTTPS ativo. A indicação é ativar o Let’s Encrypt, e uma vez que ele esteja funcional, testar novamente e acompanhar o log de erro, pois pode ser gerado um erro novo.

2) Could not load file or assembly.

O erro em questão no log fica desta forma:

Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly ‘Microsoft.AspNetCore, Version=2.1.3.0, Culture=neutral, PublicKeyToken=adb9793829ddae60’.
The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) at API.Program.CreateWebHostBuilder(String[] args) at API.Program.Main(String[] args) in C:\Users\smunari\Source\Workspaces\horticon-backend\Horticon\API\Program.cs:line 17

O erro acima pode ocorrer por dois motivos, o assembly não está no FTP no diretório BIN, ou até mesmo como no caso acima, ele está referenciando uma DLL local (C:\Users…) ao invés de utilizar os arquivos no servidor (D:\web\localuser\dominio\)

3) Até mesmo comandos SQL podem ser retornados pelo ASP.NET Core de forma detalhada, como o caso abaixo:

fail: Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (6ms) [Parameters=[@p2=’?’ (Size = 127), @p3=’?’ (Size = 8000)], CommandType=’Text’, CommandTimeout=’30’] DELETE FROM ‘AspNetUsers’ WHERE ‘Id’ = @p2 AND ‘ConcurrencyStamp’ = @p3; SELECT ROW_COUNT(); MySql.Data.MySqlClient.MySqlException (0x80004005): Cannot delete or update a parent row: a foreign key constraint fails (‘bahiavale03′.’usuario’, CONSTRAINT ‘FK_usuario_AspNetUsers’ FOREIGN KEY (‘cod_usuario’) REFERENCES ‘AspNetUsers’ (‘Id’) ON DELETE NO ACTION ON UPDATE NO ACTION) —> MySql.Data.MySqlClient.MySqlException (0x80004005): Cannot delete or update a parent row: a foreign key constraint fails (‘bahiavale03′.’usuario’, CONSTRAINT ‘FK_usuario_AspNetUsers’ FOREIGN KEY (‘cod_usuario’) REFERENCES ‘AspNetUsers’ (‘Id’) ON DELETE NO ACTION ON UPDATE NO ACTION)
at MySqlConnector.Protocol.PayloadData.ThrowIfError() in C:\projects\mysqlconnector\src\MySqlConnector\Protocol\PayloadData.cs:line 19
at MySqlConnector.Core.ServerSession.TryAsyncContinuation(Task’1 task) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 870
at System.Threading.Tasks.ContinuationResultTaskFromResultTask’2.InnerInvoke()
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)