2009-08-22 5 views
9

J'utilise VS2005, un projet de site Web, un projet de déploiement Web et Log4Net. Je peux utiliser la journalisation lorsque je me développe localement. Je peux voir les fichiers journaux et tout va bien. Lorsque je compile mon site Web (à l'aide du projet de déploiement Web), j'utilise le déploiement en tant qu'option DLL unique. Lorsque je vérifie ensuite l'emplacement de mes fichiers journaux, je ne vois aucun fichier.Pourquoi Log4Net ne crée-t-il pas de fichier journal en production?

Existe-t-il un moyen de résoudre ce problème? Je ne pense pas que l'ajout de la valeur de débogage aux paramètres de l'application aidera parce que je n'ai pas de console parce que c'est un site Web.

EDIT Je ne veux pas que le 150 rep se vide une dernière fois. J'ai comparé la trace interne de mon environnement de développement à la trace de la production. Ma trace de l'environnement de développement montre l'appel du configurateur Xml où celui de production ne l'est pas. J'ai du code dans la méthode global.asax sur application_start(). J'ai mis du code de débogage dedans et il est appelé en dev mais pas en production.

Je pense que c'est là que le projet de déploiement Web provoque des problèmes. Est-ce que global.asax est compilé dans la DLL unique? Quand je fais une construction dans le répertoire de déploiement, je vois un fichier global.compiled. Cela doit-il aller dans le dossier bin en production? Ou est le code global.asax dans la DLL unique? Avoir à la fois dans le dossier bin ou juste la DLL n'a rien changé.

Répondre

3

J'ai trouvé le problème. Les autorisations étaient CORRECT. Il s'avère que l'utilisation d'un projet de déploiement Web crée également un fichier precompliled.config à la racine. Je n'avais pas copié cela à l'enivornment de production. Dès que c'était dans le tout travaillé. Désolé personne n'a eu la prime.

1

Cela m'est déjà arrivé et était autorisations sur l'utilisateur ASPNET pour créer les fichiers où nécessaire. Peut vérifier s'il y a quelque chose dans le journal des événements de Windows l'indiquant?

Pour vérifier le type de chose (nous regardons l'observateur!) Nous sortons où le log4net allait fonctionner en écrivant ceci en utilisant le OutputDebugString() via pinvoke.. Nous avons également mis cela dans un essai pour s'assurer que nous découvrons des erreurs à ce sujet car il est très important d'utiliser pour pouvoir se connecter correctement.

7

Le processus de travail dispose-t-il de privilèges suffisants pour écrire dans le répertoire des journaux? Je suppose que ce n'est pas le cas. Vous pouvez donner au groupe de processus de travail les droits d'écrire dans le répertoire et voir si cela résout votre problème.

+0

Quels groupes doivent-je donner les permissions d'écriture. Je pensais que c'était le service réseau? – uriDium

+3

Je pense qu'il y a un groupe local, IIS_WPG, que j'utiliserais. En règle générale, tous les comptes exécutant des processus de travail doivent être placés dans ce groupe. L'utilisation du groupe vous protège si vous décidez de changer le compte pour une autre raison. En outre, si votre répertoire de journal se trouve sur le site Web, assurez-vous de mettre en place une protection pour que les utilisateurs ne puissent pas faire de demandes à ce sujet. – tvanfosson

+0

Merci pour le conseil. Y at-il un endroit où nous pouvons lire à ce sujet. Je suis vraiment nouveau pour la sécurité et les permissions. – uriDium

0

Vérifiez les autorisations sur le répertoire de sortie attendu et assurez-vous que le service Web peut y écrire. La façon la plus simple de le faire est de lancer filemon.exe (une application SysInternals) et de la restreindre en conséquence. Cela devrait vous indiquer si quelque chose échoue et vous pouvez corriger si nécessaire.

+0

J'ai exécuté filemon et filtré pour * log. Le seul fichier apparu était le fichier de débogage interne de Log4Net. Il n'a pas tenté d'ouvrir quoi que ce soit dans les fichiers journaux souhaités. – uriDium

0

Assurez-vous que la configuration de log4net est correctement configurée. Peut-être que la DLL est correcte, mais le fichier de configuration est manquant? log4net pourrait être là mais n'a aucun appender actif.

0

Pour vous assurer que la configuration de log4net est correcte, je crée un Appender UDP qui se connecte au port 9090. J'utilise la tronçonneuse http://logging.apache.org/chainsaw/index.html pour vérifier les entrées du journal. Cela vous permet de vérifier qu'au moins certaines entrées de journal sont terminées et que l'enregistreur est en cours d'exécution.

UDP Appender Config

<appender name="UdpAppender" type="log4net.Appender.UdpAppender"> 
     <remoteAddress value="localhost" /> 
     <remotePort value="9090" /> 
     <layout type="log4net.Layout.XmlLayoutSchemaLog4j"> 
      <locationInfo value="true" /> 
     </layout> 
</appender> 

Chainsaw XML

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">  
    <plugin name="LocalReceiver" class="org.apache.log4j.net.UDPReceiver"> 
     <param name="Port" value="9090" /> 
    </plugin>  
</log4j:configuration> 
+0

J'ai essayé ceci. Un couple de choses qui me déroutent. Je n'ai pas de fichier de configuration log4j. J'utilise Log4net. Cela fonctionnera-t-il toujours? La prochaine chose, j'ai utilisé mon fichier de configuration web pour garder mes paramètres (fonctionne en Dev). J'ai ouvert le port 9090 mais Chainsaw semble écouter sur les ports 4445 et 4560. Dois-je simplement mettre le fichier ci-dessus dans un fichier quelque part et réessayer? – uriDium

+0

En outre, une dernière chose, je vois que vous pointez le plug-in à une classe apache. Dois-je également télécharger ces classes ou est-ce qu'elles sont incluses dans le webstart? – uriDium

+0

enregistrez simplement le deuxième fichier XML en tant que fichier et dès que vous lancez la tronçonneuse, vous pouvez ouvrir un fichier de configuration -> si vous n'êtes pas invité à choisir un fichier de configuration que le répertoire ".chainsaw" dans votre répertoire utilisateur . vous n'avez pas besoin d'une configuration log4j, utilisez simplement votre web.config -> mais ajoutez cet appender comme configuré ci-dessus – nWorx

2

Il ressemble à la racine de votre problème est que l'événement Application_Start dans global.asax ne se déclenche pas.

Il existe un problème «connu» lors du déploiement de VS 2005 vers Windows 2003, que Application_Start ne déclenche pas.

Le contenu de Global.asax.cs sera compilé dans la DLL. Mais Application_Start ne s'exécutera que si le fichier Global.asax est présent.

Voici quelques liens pertinents:

http://accidentaltechnologist.com/asp-net/application_start-not-firing-and-the-globalasax/

http://www.velocityreviews.com/forums/t300292-web-deployment-projects-globalasax-problem.html

Il y a d'autres possibilités qui sont couvertes par les liens ci-dessus.

Hope this helps

Shiraz

4

Ajouter ce fichier dans AssemblyInfo.cs et vérifiez

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 
Questions connexes