-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Logging it IT
ASF ti permette di configurare il tuo modulo di registrazione personalizzato che verrΓ utilizzato durante l'esecuzione. Puoi farlo inserendo un file speciale chiamato NLog.config
nella directory dell'applicazione. Γ possibile leggere l'intera documentazione di NLog on NLog wiki, ma in aggiunta a questo troverete alcuni esempi utili anche qui.
Per impostazione predefinita, ASF sta registrando ColoredConsole
(output standard) e File
. La registrazione del file `` include il file log.txt
nella directory del programma e la directory `logs` per scopi di archivio.
Utilizzando la configurazione personalizzata di NLog disabilita automaticamente la configurazione predefinita di ASF, la tua configurazione sovrascrive completamente la registrazione predefinita di ASF, il che significa che se vuoi mantenere e. . il nostro obiettivo ColoredConsole
, quindi Γ¨ necessario definirlo te stesso. Questo consente non solo di aggiungere extra obiettivi di registrazione, ma anche disabilitare o modificare quelli predefiniti.
Se si desidera utilizzare la registrazione predefinita di ASF senza alcuna modifica, non Γ¨ necessario fare nulla - non Γ¨ necessario definirlo in personalizzato NLog. onfig
. Tuttavia, per riferimento l'equivalente della registrazione predefinita di ASF codificata in formato rigido sarebbe:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}|${processname}-${processid}|${level:uppercase=true}|${logger}|${message}${onexception:inner= ${exception:format=toString,Data}}" />
<target xsi:type="File" name="File" archiveFileName="${currentdir:cached=true}/logs/log.txt" archiveOldFileOnStartup="true" archiveSuffixFormat=".{1:yyyyMMdd-HHmmss}" fileName="${currentdir:cached=true}/log.txt" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}|${processname}-${processid}|${level:uppercase=true}|${logger}|${message}${onexception:inner= ${exception:format=toString,Data}}" maxArchiveFiles="10" />
<!-- Below becomes active when ASF's IPC interface is started -->
<target type="History" name="History" layout="${date:format=yyyy-MM-dd HH\:mm\:ss}|${processname}-${processid}|${level:uppercase=true}|${logger}|${message}${onexception:inner= ${exception:format=toString,Data}}" maxCount="20" />
</targets>
<rules>
<!-- The following entries specify ASP.NET (IPC) logging, we declare those so our last Debug catch-all doesn't include ASP.NET logs by default -->
<logger name="Microsoft.*" finalMinLevel="Warn" writeTo="ColoredConsole" />
<logger name="Microsoft.Hosting.Lifetime" finalMinLevel="Info" writeTo="ColoredConsole" />
<logger name="System.*" finalMinLevel="Warn" writeTo="ColoredConsole" />
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
<!-- The following entries specify ASP.NET (IPC) logging, we declare those so our last Debug catch-all doesn't include ASP.NET logs by default -->
<logger name="Microsoft.*" finalMinLevel="Warn" writeTo="File" />
<logger name="Microsoft.Hosting.Lifetime" finalMinLevel="Info" writeTo="File" />
<logger name="System.*" finalMinLevel="Warn" writeTo="File" />
<logger name="*" minlevel="Debug" writeTo="File" />
<!-- Below becomes active when ASF's IPC interface is enabled -->
<!-- The following entries specify ASP.NET (IPC) logging, we declare those so our last Debug catch-all doesn't include ASP.NET logs by default -->
<logger name="Microsoft.*" finalMinLevel="Warn" writeTo="History" />
<logger name="Microsoft.Hosting.Lifetime" finalMinLevel="Info" writeTo="History" />
<logger name="System.*" finalMinLevel="Warn" writeTo="History" />
<logger name="*" minlevel="Debug" writeTo="History" />
</rules>
</nlog>
ASF include alcuni bei trucchi di codice che migliorano la sua integrazione con NLog, consentendo di catturare messaggi specifici piΓΉ facilmente.
La variabile ${logger}
specifica NLog distinguerΓ sempre la fonte del messaggio - sarΓ BotName
di uno dei tuoi bot, o ASF
se il messaggio proviene direttamente dal processo ASF. In questo modo Γ¨ possibile catturare facilmente i messaggi considerando bot specifici, o processo ASF (solo), invece di tutti loro, in base al nome del logger.
ASF cerca di contrassegnare i messaggi in modo appropriato in base ai livelli di registrazione forniti da NLog, che consente di catturare solo messaggi specifici da specifici livelli di log invece di tutti. Naturalmente, il livello di registrazione per messaggi specifici non puΓ² essere personalizzato, in quanto Γ¨ la decisione hardcoded di ASF quanto sia serio il messaggio dato, ma Γ¨ sicuramente possibile rendere ASF meno / piΓΉ silenzioso, come si vede in forma.
ASF registra informazioni extra, come i messaggi utente/chat sul livello di registrazione Trace
. Registri di registrazione ASF predefiniti solo livello Debug
e superiore, che nasconde tali informazioni aggiuntive, in quanto non Γ¨ necessario per la maggior parte degli utenti, piΓΉ l'uscita clutters contenente messaggi potenzialmente piΓΉ importanti. Γ tuttavia possibile utilizzare tali informazioni riabilitando il livello di registrazione Trace
, soprattutto in combinazione con la registrazione di un solo bot specifico a tua scelta, con particolare evento che ti interessa.
In generale, ASF cerca di rendere il piΓΉ facile e conveniente per voi possibile, per registrare solo i messaggi che vuoi invece di forzarti a filtrarli manualmente attraverso strumenti di terze parti come grep
e simili. Semplicemente configura NLog correttamente come scritto di seguito, e si dovrebbe essere in grado di specificare anche regole di registrazione molto complesse con obiettivi personalizzati come interi database.
Per quanto riguarda il versioning - ASF cerca di spedire sempre con la versione piΓΉ aggiornata di NLog disponibile su NuGet al momento del rilascio di ASF. Non dovrebbe essere un problema usare qualsiasi funzionalitΓ che puoi trovare su NLog wiki in ASF - assicurati di usare anche ASF aggiornato.
Come parte dell'integrazione di ASF, ASF include anche il supporto per ulteriori obiettivi di registrazione NLog di ASF, che verranno spiegati di seguito.
Esempi qui sotto ti mostrano come puoi personalizzare la registrazione a tuo piacimento.
Come antipasto useremo solo il target ColoredConsole. Il nostro iniziale NLog.config
sarà così:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
</rules>
</nlog>
La spiegazione della configurazione precedente Γ¨ piuttosto semplice - definiamo un obiettivo di registrazione ****, che Γ¨ ColoredConsole
, poi reindirizziamo tutti i logger (*
) del livello Debug
e superiore al target ColoredConsole
che abbiamo definito prima.
Se si avvia ASF con sopra NLog. onfig
ora, solo il target ColoredConsole
sarΓ attivo, e ASF non scriverΓ su File
, indipendentemente dalla configurazione di ASF NLog codificata.
Dal momento che non abbiamo definito molte proprietΓ , come il layout ``, Γ¨ stato inizializzato ad un valore predefinito incorporato, in questo caso ${longdate}<unk> ${level:uppercase=true}<unk>${logger}<unk>${message}
. Possiamo personalizzarlo, ad esempio registrando il solo messaggio:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" layout="${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
</rules>
</nlog>
Se avvii ASF ora, noterai quella data, il livello e il nome del logger sono scomparsi - lasciandoti solo con i messaggi ASF in formato Function() Message
.
Possiamo anche modificare la configurazione per accedere a piΓΉ di un obiettivo. Registriamo contemporaneamente ColoredConsole
e File
.
<?xml version="1. " encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" />
<target xsi:type="File" name="File" fileName="${currentdir:cached=true}/NLog.txt" deleteOldFileOnStartup="true" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
<logger name="*" minlevel="Debug" writeTo="File" />
</rules>
</nlog>
E fatto, ora registreremo tutto su ColoredConsole
e File
. Did you notice that you can also specify custom fileName
and extra options?
Infine, ASF utilizza vari livelli di log, per rendere piΓΉ facile per voi capire cosa sta succedendo. Possiamo utilizzare tali informazioni per modificare la registrazione di gravitΓ . Diciamo che vogliamo registrare tutto (Trace
) su File
, ma solo Avviso
e oltre log level alla ColoredConsole
. Possiamo ottenere questo risultato modificando le nostre regole ``:
<?xml version="1. " encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" />
<target xsi:type="File" name="File" fileName="${currentdir:cached=true}/NLog.txt" deleteOldFileOnStartup="true" />
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="ColoredConsole" />
<logger name="*" minlevel="Trace" writeTo="File" />
</rules>
</nlog>
Questo Γ¨ questo, ora la nostra ColoredConsole
mostrerΓ solo gli avvisi e sopra, mentre ancora la registrazione di tutto su File
. Γ possibile modificare ulteriormente per accedere ad esempio solo Info
e sotto, e così via.
Infine, facciamo qualcosa di un po 'piΓΉ avanzato e registrare tutti i messaggi a file, ma solo dal bot di nome LogBot
.
<?xml version="1. " encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" />
<target xsi:type="File" name="LogBotFile" fileName="${currentdir:cached=true}/LogBot.txt" deleteOldFileOnStartup="true" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
<logger name="LogBot" minlevel="Trace" writeTo="LogBotFile" />
</rules>
</nlog>
Puoi vedere come abbiamo usato l'integrazione di ASF sopra e facilmente distinguibile sorgente del messaggio in base alla proprietΓ ${logger}
.
Gli esempi di cui sopra sono piuttosto semplici e fatti per mostrarti quanto sia facile definire le tue regole di registrazione che possono essere usate con ASF. Γ possibile utilizzare NLog per varie cose, tra cui obiettivi complessi (come mantenere i log nel database ``), rotazione log (come rimuovere i vecchi log File
, usando `Layout`personalizzati, dichiarando i tuoi filtri di registrazione `` e molto altro. Ti incoraggio a leggere tutta la documentazione di NLog per conoscere ogni opzione disponibile per te, ti permette di affinare il modulo di registrazione ASF nel modo che vuoi. Γ uno strumento davvero potente e personalizzare la registrazione di ASF non Γ¨ mai stato piΓΉ facile.
ASF disabiliterΓ temporaneamente tutte le regole che includono i target ColoredConsole
o Console
quando si prevede di inserire l'utente. Pertanto, se si desidera mantenere la registrazione per altri obiettivi anche quando ASF prevede input utente, Γ¨ necessario definire tali obiettivi con le proprie regole, come mostrato negli esempi precedenti, invece di mettere molti obiettivi in writeTo
della stessa regola (a meno che questo non sia il tuo comportamento desiderato). La disattivazione temporanea degli obiettivi della console viene effettuata per mantenere la console pulita durante l'attesa dell'input dell'utente.
ASF include il supporto esteso per la registrazione della chat non solo registrando tutti i messaggi ricevuti / inviati sul livello di registrazione Trace
, ma anche esporre informazioni extra relative a loro in proprietΓ evento. Questo perchΓ© abbiamo bisogno di gestire i messaggi di chat come comandi comunque, quindi non ci costa nulla per registrare questi eventi al fine di rendere possibile per voi di aggiungere una logica extra (come fare ASF il vostro archivio di chat Steam personale).
Nome | Descrizione |
---|---|
Eco | Tipo bool . Questo Γ¨ impostato su true quando il messaggio viene inviato da noi al destinatario, e false altrimenti. |
Messaggio | Tipo della stringa ``. Questo Γ¨ il messaggio inviato/ricevuto. |
ChatGroupID |
ulong type. Questo Γ¨ l'ID della chat di gruppo per i messaggi inviati/ricevuti. SarΓ 0 quando non viene utilizzata una chat di gruppo per trasmettere questo messaggio. |
ChatID |
ulong type. Questo Γ¨ l'ID del canale ChatGroupID per i messaggi inviati/ricevuti. SarΓ 0 quando non viene utilizzata una chat di gruppo per trasmettere questo messaggio. |
SteamID |
ulong type. Questo Γ¨ l'ID dell'utente Steam per i messaggi inviati/ricevuti. PuΓ² essere 0 quando nessun utente particolare Γ¨ coinvolto nella trasmissione dei messaggi (e. . quando inviamo un messaggio a una chat di gruppo). |
Questo esempio Γ¨ basato sul nostro esempio di base ColoredConsole
sopra. Prima di cercare di capirlo, Raccomando vivamente di dare un'occhiata sopra per conoscere prima le basi della registrazione di NLog.
<?xml version="1. " encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="ColoredConsole" />
<target xsi:type="File" name="ChatLogFile" fileName="${currentdir:cached=true}/logs/chat/${event-properties:item=ChatGroupID}-${event-properties:item=ChatID}${when:when='${event-properties:item=ChatGroupID}' == 0:inner=-${event-properties:item=SteamID}}.txt" layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${event-properties:item=Message} ${when:when='${event-properties:item=Echo}' == true:inner=->:else=<-} ${event-properties:item=SteamID}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ColoredConsole" />
<logger name="MainAccount" level="Trace" writeTo="ChatLogFile">
<filters defaultAction="Log">
<when condition="not starts-with('${message}','OnIncoming') and not starts-with('${message}','SendMessage')" action="Ignore" />
</filters>
</logger>
</rules>
</nlog>
Abbiamo iniziato dal nostro esempio di base ColoredConsole
e lo abbiamo esteso ulteriormente. In primo luogo, abbiamo preparato un file di log di chat permanente per ogni canale di gruppo e utente di Steam - questo Γ¨ possibile grazie alle proprietΓ extra che ASF ci espone in modo elegante. Abbiamo anche deciso di andare con un layout personalizzato che scrive solo la data corrente, il messaggio, le informazioni inviate/ricevute e l'utente stesso di Steam. Infine, abbiamo abilitato la nostra regola di registrazione della chat solo per il livello Trace
, solo per il nostro bot MainAccount
e solo per le funzioni relative alla registrazione delle chat (OnIncoming*
che viene utilizzato per ricevere messaggi ed eco, e SendMessage*
per l'invio di messaggi ASF).
L'esempio sopra genererΓ il file logs/chat/0-0-76561198069026042.txt
quando si parla con ArchiBot:
2018-07-26 01:38:38 come state facendo? -> 76561198069026042
2018-07-26 01:38:38 Sto facendo benissimo, che dire di te? <- 76561198069026042
Naturalmente questo è solo un esempio di lavoro con alcuni bei trucchi di layout mostrati in modo pratico. à possibile espandere ulteriormente questa idea alle proprie esigenze, come filtraggio extra, ordine personalizzato, layout personale, registrazione solo messaggi ricevuti e così via.
Oltre agli obiettivi di registrazione NLog standard (come ColoredConsole
e File
spiegati sopra), Γ¨ anche possibile utilizzare obiettivi di registrazione ASF personalizzati.
Per la massima completezza, la definizione degli obiettivi di ASF seguirΓ la convenzione di documentazione NLog.
Come puoi indovinare, questo obiettivo utilizza i messaggi di chat di Steam per registrare i messaggi di ASF. Γ possibile configurarlo per utilizzare una chat di gruppo o una chat privata. Oltre a specificare un obiettivo Steam per i tuoi messaggi, puoi anche specificare il botName `` del bot che dovrebbe inviare quelli.
Supportato in tutti gli ambienti utilizzati da ASF.
<targets>
<target type="Steam"
name="String"
layout="Layout"
chatGroupID="Ulong"
steamID="Ulong"
botName="Layout" />
</targets>
Per saperne di piΓΉ sull'utilizzo del file di configurazione .
nome - Nome del bersaglio.
layout - Testo da renderizzare. Layout Richiesto. Default: ${level:uppercase=true}<unk>${logger}<unk>${message}
chatGroupID - ID della chat di gruppo ha dichiarato un intero senza firma a 64 bit. Non richiesto. Il valore predefinito Γ¨ 0
che disabiliterΓ le funzionalitΓ di chat di gruppo e utilizzerΓ invece la chat privata. Quando abilitato (imposta a valore diverso da zero), La proprietΓ steamID
di seguito agisce come chatID
e specifica l'ID del canale in questo chatGroupID
a cui il bot dovrebbe inviare messaggi.
steamID - SteamID ha dichiarato un intero non firmato a 64 bit dell'utente Steam di destinazione (come SteamOwnerID
), o destinazione chatID
(quando chatGroupID
Γ¨ impostato). Obbligatorio. Il valore predefinito Γ¨ 0
che disabilita completamente la registrazione.
botName - Nome del bot (come riconosciuto da ASF, case-sensitive) che invierΓ messaggi a steamID
dichiarato sopra. Non richiesto. Predefiniti a null
che selezionerΓ automaticamente qualsiasi bot attualmente connesso. Si raccomanda di impostare questo valore in modo appropriato, poichΓ© SteamTarget
non tiene conto di molte limitazioni di Steam, ad esempio il fatto che devi avere steamID
del target sulla tua lista di amici. Questa variabile Γ¨ definita come tipo layout , quindi puoi usare una sintassi speciale, come ${logger}
per utilizzare il bot che ha generato il messaggio.
Per scrivere tutti i messaggi del livello Debug
e oltre, dal bot chiamato MyBot
al SteamID di 76561198006963719
, dovresti usare NLog. onfig
simile a sotto:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="https://nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
<targets>
<target type="Steam" name="Steam" steamID="76561198006963719" botName="MyBot" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="Steam" />
</rules>
</nlog>
Avviso: Il nostro SteamTarget
Γ¨ un obiettivo personalizzato, quindi dovresti assicurarti di dichiararlo come type="Steam"
, NON xsi:type="Steam"
, in quanto xsi Γ¨ riservato per gli obiettivi ufficiali supportati da NLog.
Quando avvii ASF con NLog. onfig
simile a sopra, MyBot
inizierΓ la messaggistica 76561198006963719
Utente di Steam con tutti i soliti messaggi di registro di ASF. Tieni presente che MyBot
deve essere connesso per inviare messaggi, quindi tutti i messaggi ASF iniziali che sono avvenuti prima che il nostro bot potesse connettersi alla rete di Steam, non saranno inoltrati.
Naturalmente, SteamTarget
ha tutte le funzioni tipiche che ci si puΓ² aspettare dal generico TargetWithLayout
, in modo da poter utilizzarlo in combinazione con e. . layout personalizzati, nomi o regole avanzate di registrazione. L'esempio di cui sopra Γ¨ solo quello piΓΉ basilare.
Fai attenzione quando decidi di combinare il livello di registrazione Debug
o inferiore nel tuo SteamTarget
con steamID
che partecipa al processo ASF. Questo puΓ² portare a potenziali StackOverflowException
perchΓ© creerai un ciclo infinito di ASF che riceve il messaggio dato, quindi registrarlo tramite Steam, con conseguente un altro messaggio che deve essere registrato. Attualmente l'unica possibilitΓ per accadere Γ¨ di registrare il livello Trace
(dove ASF registra i propri messaggi di chat), o livello Debug
durante l'esecuzione di ASF in modalitΓ Debug
(dove ASF registra tutti i pacchetti Steam).
In breve, se il tuo steamID
sta partecipando allo stesso processo di ASF, quindi il livello di registrazione minlevel
del tuo SteamTarget
dovrebbe essere Info
(o Debug
se non stai anche eseguendo ASF in Debug
mode) e superiore. In alternativa puoi definire i tuoi filtri di registrazione <when>
per evitare un ciclo di registrazione infinito, se modificare il livello non Γ¨ appropriato per il vostro caso. Questa avvertenza si applica anche alle chat di gruppo.
Questo obiettivo viene utilizzato internamente da ASF per fornire la cronologia di registrazione a dimensione fissa nell'endpoint /Api/NLog
di ASF API che puΓ² essere successivamente consumato da ASF-ui e da altri strumenti. In generale si dovrebbe definire questo obiettivo solo se si sta giΓ utilizzando configurazione NLog personalizzata per altre personalizzazioni e si desidera anche che il registro sia esposto in ASF API, e. . per ASF-ui. PuΓ² anche essere dichiarato quando si desidera modificare il layout predefinito o maxCount
dei messaggi salvati.
Supportato in tutti gli ambienti utilizzati da ASF.
<targets>
<target type="History"
name="String"
layout="Layout"
maxCount="Byte" />
</targets>
Per saperne di piΓΉ sull'utilizzo del file di configurazione .
nome - Nome del bersaglio.
layout - Testo da renderizzare. Layout Richiesto. Default: ${date:format=yyyy-MM-dd HH\:mm\:ss}<unk>${processname}-${processid}<unk> ${level:uppercase=true}<unk>${logger}<unk>${message}${onexception:inner= ${exception:format=toString,Data}}
maxCount - QuantitΓ massima di log memorizzati per la cronologia su richiesta. Non richiesto. Predefinito a 20
che Γ¨ un buon equilibrio per fornire la storia iniziale, mantenendo ancora a mente l'utilizzo della memoria che esce dai requisiti di archiviazione. Deve essere maggiore di 0
.
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
- π‘ Casa
- π§ Configurazione
- π¬ Domande frequenti
- Installazione (inizia qui)
- π₯ Riscatto giochi in background
- π’ Comandi
- π οΈ CompatibilitΓ
- π§© ItemsMatcherPlugin
- π Gestione
- β±οΈ Prestazioni
- π‘ Comunicazione remota
- πͺ Condivisione familiare di Steam
- π Trading
- β¨οΈ Argomenti da riga di comando
- π§ Deprecation
- π³ Docker
- π€ FAQ Estese
- π Configurazione ad alte prestazioni
- π IPC
- π Localizzazione
- π Registrazione
- πΎ Configurazione bassa memoria
- π΅πΌββοΈ MonitoringPlugin
- π Plugin
- π Sicurezza
- π§© SteamTokenDumperPlugin
- π¦ Terze parti
- π΅ Autenticazione due fattori