2015-12-22 5 views
0

J'ai un rôle de travail Azure que je souhaite mettre à jour la journalisation (le projet avait une journalisation existante, bien que je ne sois pas convaincu que cela ait jamais fonctionné). Il est configuré pour utiliser Common.Logging, mais avec Log4Net. J'ai mis en place 2 appenders dans Log4Net - un à ElasticSearch et un à un fichier tournant - dont aucun n'enregistre aucune sortie.Log4Net + Common.Logging + Azure = Fichier journal vide

Dans le app.config du rôle des travailleurs, j'ai configuré log4net, suivi par Common.Logging:

... 
<log4net> 
<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4stash"> 
    <Server>localhost</Server> 
    <Port>9200</Port> 
    <IndexName>log_test_%{+yyyy-MM-dd}</IndexName> 
    <IndexType>LogEvent</IndexType> 
    <Bulksize>2000</Bulksize> 
    <BulkIdleTimeout>10000</BulkIdleTimeout> 
    <IndexAsync>False</IndexAsync> 
    <ElasticFilters> 
    <Add> 
     <Key>My Data Origin</Key> 
     <Value>Worker Role</Value> 
    </Add> 
    </ElasticFilters> 
</appender> 
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\tmp\log4net_rollingfile.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="100KB" /> 
    <maxSizeRollBackups value="2" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
</appender> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="ElasticSearchAppender" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 

<common> 
<logging> 
    <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> 
    <arg key="configType" value="INLINE" /> 
    </factoryAdapter> 
</logging> 
</common> 

je tendance à penser que quelque chose est hors de la configuration. Toutefois, l'application RollingFile crée en effet c: \ tmp \ log4net_rollingfile.log, ce qui m'empêche d'expliquer pourquoi rien n'est réellement écrit dans le fichier. En outre, aucune donnée n'est envoyée à ElasticSearch.

Après avoir activé le diagnostic de Log4net avec « log4net.Internal.Debug », je peux voir que les appenders sont chargés se:

log4net: Adding appender named [ElasticSearchAppender] to logger [root]. 
log4net: Adding appender named [RollingFile] to logger [root]. 

Répondre

0

Essayez d'écrire le journal dans l'arborescence des répertoires de rôle Web/travailleur.

1

J'ai fait deux choses pour résoudre ce problème. Le premier n'a peut-être pas été nécessaire, mais juste au cas où, je l'inclue ici. La deuxième - eh bien, c'est juste un cas de développement moderne qui est malheureusement utile. Heureusement, le code source de Common.Logging est disponible publiquement, ce qui était très important pour dépister le problème dans le débogueur.

D'abord (et peut-être inutile pour la résolution en cours), la manière moderne de configurer votre log4net factoryAdapter dans la journalisation commune consiste à utiliser une bibliothèque spécifique à votre version actuelle de log4net. Il n'y avait pas un pour la version que je me sers (log4net 1.2.15), mais en utilisant le Log4NetLoggerFactoryAdapter de Common.Logging.Log4Net1213 travaillé:

<common> 
<logging> 
    <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1213, Version=3.3.1.0, Culture=neutral"> 
    <arg key="configType" value="INLINE" /> 
    </factoryAdapter> 
</logging> 
</common> 

En second lieu, le vrai Nitty Gritty du problème, était l'application. config. Pas l'app.config que j'ai copié dans la question originale, ci-dessus, mais plus précisément, app.Debug.config. Mon cerveau a complètement ignoré le petit triangle à gauche de app.config qui suggère plusieurs ressources impliquées avec app.config. Dans app.Debug.config, mon factoryAdapter était complètement surchargé avec Common.Logging.Simple.TraceLoggerFactoryAdapter. Par conséquent, indépendamment de ce que j'ai mis dans le principal app.config, je n'écrivais jamais de journaux aux emplacements prévus. Aucune idée pourquoi le fichier vide a été créé pour l'appendeur RollingFile, mais c'est un autre problème pour un autre jour.