Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Konfiguracja logowania serwisów nAxiom

Podsumowanie:

Logowanie informacji z serwisów nAxiom obsługujących server side, to jest opartych na platformie .NET, odbywa się przy użyciu oprogramowania NLog. Za konfigurację logowania odpowiadają pliki nlog.config w podfolderach poszczególnych serwisów w folderze instalacyjnym witryny. Informacje są logowane w pliku bazy danych SQLite (log.db3) i lub plikach textowych w podfolderze logs dla poszczególnych serwisów.

Info

W przypadku aktualizacji witryny nAxiom, instalator archiwizuje znalezione pliki db3, zmieniając im nazwę na Log-<znacznikczasu>.db3_arch.

W plikach logów w formacie SQLite (db3) logowane są następujące informacje:

  • MachineName: nazwa komputera
  • Timestamp: znacznik czasu zdarzenia
  • Level: poziom istotności zdarzenia; patrz niżej
  • TenantIdentity: identyfikator tenanta
  • UserIdentity: id zalogowanego użytkownika (jeśli dostępne)
  • HttpRequestTraceIdentifier: unikalny identyfikator żądania HTTP pozwalający łączyć wiele informacji zalogowanych w obrębie jednego żądania obsługiwanego przez system.
  • ControllerName: nazwa kontrolera
  • ActionName: nazwa akcji
  • Logger: nazwa modułu rejestrującego dany wpis
  • Message: treść komunikatu
  • Exception: zgłoszony wyjątek
  • CustomParamModel: wartości parametrów używanych w zapytaniu SQL wykonywanym w ramach akcji (JSON); zapisywane tylko dla poziomu istotności Error
  • QueryModel: jak wyżej
  • RequestName: nazwa żądania
  • Request: treść żądania
  • MigrationLogId: identyfikator logu migracji

Pliki nlog.config to pliki XML z konfiguracją logowania każdego serwisu dotnetowego. Plik musi zawierać dwie sekcje:

  • targets: miejsca docelowe logowania informacji; np. plik tekstowy, plik bazy danych, konsola, e-mail.
  • rules: reguły logowania informacji; zawierają elementy logger, które wiążą miejsca docelowe z poziomem istotności.

Elementy logger mają następujące atrybuty:

  • name: nazwa wzorca logowania;
  • minlevel: minimalny poziom istotności;
  • maxlevel: maksymalny poziom istotności;
  • level: konkretny poziom istotności;
  • levels: rozdzielana przecinkami lista poziomów istotności;
  • writeTo: rozdzielana przecinkami lista elementów target, w których mają być zapisywane informacje;
  • final: po tej regule nie są przetwarzane żadne inne reguły;
  • enabled: ustawienie wartości false wyłącza regułę z przetwarzania.

Przykładowa konfiguracja pliku nlog.config (dla serwisu api):

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Error"
      internalLogFile="${basedir}/logs/internal-nlog.txt">

	<extensions>
		<add assembly="NLog.Web.AspNetCore"/>
	</extensions>

	<!--Błędy uniemożliwiające działanie aplikacji-->
	<variable name='FatalLevel' value='Fatal'/>
	<!--Błędy, które mogą, ale nie muszą, zatrzymać aplikacji-->
	<variable name='ErrorLevel' value='Error'/>
	<!--Nieoczekiwane zdarzenia, które nie zatrzymują aplikacji-->
	<variable name='WarnLevel' value='Warn'/>
	<!--Normalne zdarzenia podczas działania aplikacji-->
	<variable name='InfoLevel' value='Info'/>
	<!--Informacje do debugowania-->
	<variable name='DebugLevel' value='Debug'/>
	<!--Szczegółowe informacje do debugowania-->
	<variable name='TraceLevel' value='Trace'/>
  <!--Wyłączenie logowania-->
	<variable name='OffLevel' value='Off'/>

	<targets>
  <!--Plik tekstowy; atrybut layout definiuje rejestrowane ingformacje-->
		<target xsi:type="File"
				name="logfile"
				maxArchiveFiles="7"
				archiveAboveSize="10485760"
				fileName="${basedir}/logs/${shortdate}_logs-all.log"
				layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|
                ${logger}|${message} ${exception:format=tostring}" />

  <!--Plik bazy danych; atrybut commandText definiuje zapytanie tworzące
  tabelę z rejestrowanymi informacjami-->
		<target name="sqlitedb" xsi:type="Database" keepConnection="false"
				dbProvider="System.Data.SQLite.SQLiteConnection, System.Data.SQLite"
				connectionString="Data Source=${basedir}/Log.db3;"
				commandText="insert into Logs(MachineName, Timestamp, Level, TenantIdentity,
        UserIdentity, ControllerName, ActionName, Logger, Message, Exception, CustomParamModel,
        QueryModel, Request, RequestName, HttpRequestTraceIdentifier, MigrationLogId)
        values(@MachineName, @Timestamp, @Level, @TenantIdentity, @UserIdentity,
        @ControllerName, @ActionName, @Logger, @Message, @Exception, @CustomParamModel,
        @QueryModel, @Request, @RequestName, @HttpRequestTraceIdentifier, @MigrationLogId)">
			<parameter name="@MachineName" layout="${machinename}" />
			<parameter name="@Timestamp" layout="${date}" />
			<parameter name="@Level" layout="${level}" />
			<parameter name="@TenantIdentity" layout="${mdc:item=TenantGuid}" />
			<parameter name="@UserIdentity" layout="${mdc:item=UserGuid}" />
			<parameter name="@ControllerName" layout="${aspnet-mvc-controller}" />
			<parameter name="@ActionName" layout="${aspnet-mvc-action}" />
			<parameter name="@Logger" layout="${logger}" />
			<parameter name="@Message" layout="${message}" />
			<parameter name="@Exception" layout="${exception:tostring}" />
			<parameter name="@CustomParamModel" layout="${mdlc:CustomParamModel}" />
			<parameter name="@Request" layout="${mdlc:Request:when=level=LogLevel.Error}" />
			<parameter name="@RequestName" layout="${mdlc:RequestName}" />
			<parameter name="@HttpRequestTraceIdentifier" layout="${aspnet-traceidentifier}" />
			<parameter name="@QueryModel" layout="${mdlc:QueryModel}" />
			<parameter name="@MigrationLogId" layout="${mdlc:item=MigrationLogId}" />
		</target>

	</targets>


	<rules>
		<logger name="*" minlevel="${OffLevel}" writeTo="logfile" />

		<!--Pominięcie wpisów z modułów Microsoft i IdentityServer4
    do poziomu Info włącznie-->
		<logger name="Microsoft.*" maxlevel="${InfoLevel}" final="true" />
		<logger name="IdentityServer4.*" maxlevel="${InfoLevel}" final="true" />

		<!-- Zapis wszystkich informacji od poziomu Info do pliku bazy danych-->
		<logger name="*" minlevel="${InfoLevel}" writeTo="sqlitedb" />

	</rules>

	<!-- Uwzględnienie innych plików nlog -->
	<include file="nlog-*.config" />
</nlog>
|← Logi bezpieczeństwa |↑ Do góry |→ Logi serwisowe |

Copyright © 2025 OPTEAM SA. Theme Copyright © 2017-2020 Patrick Marsceill. Distributed by an MIT license.