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
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? :)
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.
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.");
Log4net enregistre dans votre dossier de projet. Quelque chose comme: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt
.
Où:
J'espère que cela t'aides!
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");
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 .
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.
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! :)
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"));