web-dev-qa-db-fra.com

Où log4net créera-t-il ce fichier journal?

Lorsque je règle la valeur du fichier sur logs\log-file.txt, où va-t-il créer exactement ce dossier? Dans le /bin répertoire?

Mon web.config ressemble à ceci:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="logs\log-file.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
</log4net>

Est-ce la bonne façon de vous connecter:

ILog logger = LogManager.GetLogger(typeof(CCController));
logger.Error("Some Page", ex);  // where ex is the exception instance
68
Blankman

Si vous souhaitez que votre fichier journal soit placé à un emplacement spécifié (le répertoire de sortie de votre projet sera décidé au moment de l'exécution), vous pouvez configurer votre .config entrée de fichier de cette façon

<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" />

puis dans le code avant d'appeler log4net configure, définissez le nouveau chemin comme ci-dessous

 log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
 log4net.Config.XmlConfigurator.Configure();

Est-ce simple? :)

61
Avijit Chatterjee

il créera le fichier dans le répertoire racine de votre projet/solution.

Vous pouvez spécifier un emplacement de choix dans le fichier Web.config de votre application, comme suit:

   <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:/ServiceLogs/Olympus.Core.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value=".yyyyMMdd.log" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
      <maxSizeRollBackups value="-1" />
      <countDirection value="1" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception" />
      </layout>
    </appender>

la balise de fichier spécifie l'emplacement.

44
Oladipo Olasemo

La valeur du fichier peut être un chemin absolu du type "c:\logs\log.txt" ou un chemin relatif qui, je crois, est relatif au répertoire bin.

En ce qui concerne son implémentation, je place généralement les éléments suivants en haut de la classe à laquelle je souhaite me connecter:

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType);

Enfin, vous pouvez l'utiliser comme suit:

Log.Debug("This is a DEBUG level message.");
19
Ben.Vineyard

Log4net enregistre dans votre dossier de projet. Quelque chose comme: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt.

Où:

  • SolutionFolder est l'endroit où vous enregistrez votre solution
  • ProjectFolder est le dossier où votre projet réside dans la solution et
  • SolutionConfiguration est le dossier qui contient tous les fichiers binaires de votre projet (le fichier par défaut est Debug ou Release)

J'espère que cela t'aides!

10
FileAppender appender = repository.GetAppenders().OfType<FileAppender>().FirstOrDefault();
if (appender != null)
    logger.DebugFormat("log file located at : {0}", appender.File);
else
    logger.Error("Could not locate fileAppender");
6
Mickey Perlstein

Pour le dossier de log et les fichiers, allez avec @ Bens answer .

Je vais cependant commenter la partie création du journal. Il n'y a pas de manière correcte . Lors du codage manuel des enregistreurs, je le fais comme vous le faites:

ILog logger = LogManager.GetLogger(typeof(CCController));

parce que c'est court et concis.

Cela dit, je ne crée pas les instances de journalisation dans les classes ces jours-ci, je laisse mon conteneur IoC l'injecter pour moi .

4
Peter Lillevold

Je pense que votre exemple enregistre dans vos dossiers de projet et que, à moins que l'utilisateur iis par défaut, ou .NET, dispose de l'autorisation de création, il ne sera pas en mesure de créer le dossier des journaux.

Je créerais d'abord le dossier des journaux et donnerais à l'utilisateur iis une permission complète pour voir si le fichier journal était en cours de création.

0
griegs

si vous souhaitez choisir dynamiquement le chemin du fichier journal, utilisez la méthode indiquée dans ce lien: méthode pour choisir dynamiquement le chemin du fichier journal .

si vous le souhaitez, vous pouvez définir le chemin d'accès de votre fichier EXE d'application comme ceci:

var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);

puis envoyez ce 'logFileLocation' à la méthode écrite dans le lien ci-dessus comme ceci:

Initialize(logFileLocation);

et vous êtes prêt à partir! :)

0
Ben.S

Je développais pour .NET core 2.1 en utilisant log4net 2.0.8 et le code NealWalters trouvé gémit à propos de 0 arguments pour XmlConfigurator.Configure (). J'ai trouvé une solution de Matt Watson ici

        log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
        var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
        XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
0
andrew pate