Logging/fr

From OpenSimulator

Revision as of 02:14, 22 August 2021 by Acryline (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Modification des niveaux de journalisation avant le démarrage

OpenSimulator utilise le paquet [ http://logging.apache.org/log4net/ log4net ] pour la journalisation. Cela signifie que chaque exécutable que vous lancez pour OpenSimulator est accompagné d'un fichier .config qui contient la configuration de la journalisation.

Par exemple

  • OpenSim.exe -> config est OpenSim.exe.config
  • OpenSim.32BitLaunch.exe -> config est OpenSim.32BitLaunch.exe.config
  • Robust.exe -> config est Robust.exe.config

Le fichier OpenSim.exe.config ressemble à ceci.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
 </configSections>
 <appSettings>
 </appSettings>
 <log4net>
   <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date{HH:mm:ss} - %message%newline" />
     </layout>
   </appender>

   <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
     <file value="OpenSim.log" />
     <appendToFile value="true" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date %-5level - %logger %message%newline" />
     </layout>
   </appender>

   <logger name="NHibernate" additivity="false">
     <level value="INFO"/>
     <appender-ref ref="NHibernateFileLog"/>
   </logger>

   <root>
     <level value="DEBUG" />
     <appender-ref ref="Console" />
     <appender-ref ref="LogFileAppender" />
   </root>
 </log4net>
</configuration>

Cela semble assez compliqué, mais si vous voulez changer le niveau des messages enregistrés, vous pouvez modifier la valeur de la section <root> (juste à la fin) qui est la suivante

<level value="DEBUG" />

dans l'exemple ci-dessus en quelque chose de différent, par ex.

<level value="WARN" />

qui n'affichera que les messages de journal de niveau avertissement et erreur. Les valeurs permises sont ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF.

Vous pouvez également voir dans le fichier OpenSim.exe.config que les fichiers journaux sont écrits dans OpenSim.log (ainsi que dans la console).

Ajout au fichier de collecte et taille maximale du fichier journal

Log4net fournit plusieurs appenders de fichiers journaux. L'un d'entre eux est le RollingFileAppender, qui limite la taille des fichiers journaux et les fait tourner automatiquement. Pour utiliser cet appender, ajoutez la section suivante à la configuration de log4net :

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="OpenSim.log" />
  <appendToFile value="true" />
  <maximumFileSize value="1000KB" />
  <maxSizeRollBackups value="2" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %logger %message%newline" />
  </layout>
</appender>

La taille maximale peut être définie dans l'élément maximumFileSize, l'élément maxSizeRollBackups détermine le nombre maximal de fichiers journaux roulants. Ainsi, le paramètre ci-dessus créera un fichier journal nommé OpenSim.log avec une taille maximale de 1000KB. Lorsque la limite est atteinte, OpenSim.log est renommé en OpenSim.log.1, et un nouveau OpenSim.log est lancé (éventuellement après avoir renommé OpenSim.log.1 en OpenSim.log.2, si ce fichier existe déjà).

Pour utiliser l'appender défini ci-dessus, remplacez la ligne

 <appender-ref ref="LogFileAppender" />

par

 <appender-ref ref="RollingFileAppender" />

Vous trouverez de plus amples informations sur la configuration de log4net sur la page Page de configuration de Log4Net.

Exigences plus spécialisées

Par exemple, comme sur cette page Mantis#2603, si vous voulez enregistrer la sortie DEBUG de XEngine dans un fichier séparé xengine.log, et ne laisser que les messages de niveau INFO et supérieur apparaître sur la console, vous pouvez le faire en ajoutant les lignes suivantes à votre OpenSim.exe.config :

   <appender name="XengineLogFileAppender" type="log4net.Appender.FileAppender">
     <file value="xengine.log" />
     <appendToFile value="true" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date %-5level - %logger %message%newline" />
     </layout>
   </appender>

   <appender name="XengineConsole" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date{HH:mm:ss} - %message%newline" />
     </layout>
     <filter type="log4net.Filter.LevelRangeFilter">
       <levelMin value="INFO" />
       <levelMax value="FATAL" />
     </filter>
   </appender>

   <logger name="OpenSim.Region.ScriptEngine.XEngine.XEngine" additivity="false">
     <appender-ref ref="XengineLogFileAppender" />
     <appender-ref ref="XengineConsole" />
   </logger>

( S'il existe un moyen plus court de le faire, veuillez remplacer ces lignes ci-dessus. ) ;-)

Ou, comme exemple plus simple, si vous voulez avoir la journalisation normale, sauf pour les HttpServers pour lesquels vous voulez seulement des messages INFO, vous pouvez ajouter les lignes suivantes après la balise </root>- :

   <logger name="OpenSim.Framework.Servers.HttpServerLogWriter">
     <level value="INFO" />
   </logger>

Journaux dans MySQL

Cet exemple peut être utilisé pour enregistrer les données dans une table MySQL.

Étape 1 : Créez une base de données MySQL "OSLog" et ajoutez la table suivante dans laquelle les données seront stockées

 CREATE TABLE `opensim_log` (
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  `DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Level` varchar(100) DEFAULT ,
  `Logger` varchar(512) DEFAULT ,
  `Message` varchar(1000) DEFAULT ,
  PRIMARY KEY (`ID`) 
 );  

Etape 2 : Remplacer la section de l'appender "LogFileAppender" par

 <appender name="MySql_ADONetAppender" type="log4net.Appender.ADONetAppender">
   <bufferSize value="5" />
   <lossy value="false"/>
   <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>
   <connectionString value="Server=localhost;Database=OSLog;Uid=DBUsername;Pwd=DBUserPassword"/>
   <commandText value="INSERT INTO opensim_log(Date,Level,Logger,Message) VALUES (@log_date, @log_level, @logger, @message)"/>
   <parameter>
     <parameterName value="@log_date"/>
     <dbType value="DateTime"/>
     <layout type="log4net.Layout.RawTimeStampLayout"/>
   </parameter>
   <parameter>
     <parameterName value="@log_level"/>
     <dbType value="String"/>
     <size value="512"/>
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%level"/>
     </layout>
   </parameter>
   <parameter>
     <parameterName value="@logger"/>
     <dbType value="String"/>
     <size value="512"/>
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%logger"/>
     </layout>
   </parameter>
   <parameter>
     <parameterName value="@message"/>
     <dbType value="String"/>
     <size value="1000"/>
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%message"/>
     </layout>
   </parameter>
 </appender>

Pour utiliser l'appender défini ci-dessus, remplacez la ligne

 <appender-ref ref="LogFileAppender" />

par

 <appender-ref ref="MySql_ADONetAppender" />

Remarque : On peut aussi continuer à enregistrer les données dans le fichier, auquel cas il n'est pas nécessaire de remplacer la section LogFileAppender.

Configuration des niveaux de journalisation pendant l'exécution

Il n'est actuellement pas possible de modifier le niveau de journalisation dans le fichier journal pendant l'exécution. Cependant, il est possible de modifier le niveau envoyé à la console. Vous pouvez le faire en exécutant la commande

set log level [<level>]

Par exemple

set log level error

Ce qui signifie que seules les erreurs sont envoyées à la console. Le journal reçoit toujours les messages qui correspondent au niveau défini dans le fichier OpenSim.exe.config au démarrage.

get log level

vous indiquera quel est le niveau de journalisation actuel de la console.

Les modifications du niveau de journal envoyé à la console ne persistent pas lors des redémarrages. Si vous souhaitez que le changement soit permanent, vous pouvez définir une valeur seuil dans le ConsoleAppender dans un fichier de configuration tel que OpenSim.exe.config comme décrit ci-dessus.

Spécifier l'emplacement du fichier journal par instance

La journalisation de plusieurs instances exécutées à partir d'un seul OpenSim.exe n'est pas quelque chose que la configuration par défaut de log4net gère. Heureusement, log4net accepte les variables d'environnement. Cela permet à un script enveloppant OpenSim.exe de spécifier un emplacement de journal en définissant une variable d'environnement. Un exemple d'extrait de Opensim.exe.config pourrait être :

   <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
     <file type="log4net.Util.PatternString" value="%env{OSIM_LOGPATH}\OpenSim.log" /> 
     <appendToFile value="true" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date %-5level - %logger %message%newline" />
     </layout>
   </appender>


Quand OpenSimulator fonctionne sous Mono sous Linux, vous devriez avoir quelque chose dans votre startscript.sh comme :

   export LOGFILEPATH='/some/absolute/path/'

... et dans Opensim.exe.config

   <file type="log4net.Util.PatternString" value="${LOGFILEPATH}OpenSim.log" />
Personal tools
General
About This Wiki