Comment utiliser log4net dans Asp.net noyau 2.0
je configure log4net
dans mon asp.net core 2.0 de l'application comme indiqué dans cet article LINK
programme.cs
public static void Main(string[] args)
{
var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
BuildWebHost(args).Run();
}
HomeController
public class HomeController : Controller
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));
public IActionResult Error()
{
log.Info("Hello logging world!");
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
log4net.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingFile" />
</root>
<appender name="RollingFile" type="log4net.Appender.FileAppender">
<file value="C:Tempapp.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
pas de chance! Je ne vois pas de fichier généré par C:Tempapp.log
répertoire. Ce serait l'erreur? comment configurer log4net
pour asp.net noyau 2.0?
5 réponses
je suis capable d'enregistrer un fichier avec succès en utilisant le code suivant
public static void Main(string[] args)
{
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead("log4net.config"));
var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
BuildWebHost(args).Run();
}
log4net.config dans la racine du site
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="C:\Temp\" />
<datePattern value="yyyy-MM-dd.'txt'"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<maxSizeRollBackups value="100"/>
<maximumFileSize value="15MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level App %newline %message %newline %newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
notez qu'il existe déjà un adaptateur log4net pour ASP.NET interface de journalisation Centrale.
la Seule chose que vous devez faire est de passer le ILoggerFactory
pour votre Startup
classe, puis d'appeler
loggerFactory.AddLog4Net();
et avoir une configuration en place. Donc vous n'avez pas à écrire de code de chauffage.
https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore
suite à la réponse D'Irfan, J'ai la configuration XML suivante sur OSX avec .NET Core 2.1.300 qui enregistre et ajoute correctement un ./log
dossier et également à la console. Remarque log4net.config
doit exister dans la solution root (alors que dans mon cas, ma appli root est un sous-dossier).
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs/" />
<datePattern value="yyyy-MM-dd.'txt'"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<maxSizeRollBackups value="100"/>
<maximumFileSize value="15MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level App %newline %message %newline %newline"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender"/>
<appender-ref ref="ConsoleAppender"/>
</root>
</log4net>
une Autre note, la façon traditionnelle de configuration XML à l'intérieur de app.config
n'a pas fonctionné:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net> ...
pour une raison quelconque, le noeud log4net n'a pas été trouvé lors de l'accès au XMLDocument via log4netConfig["log4net"]
.
Vous devez installer Microsoft.Extension.Journalisation.Log4Net.AspNetCore package NuGet et ajouter un log4net.config-file à votre application. Alors cela devrait fonctionner:
public class Program
{
private readonly ILogger<Program> logger;
public Program()
{
var services = new ServiceCollection()
.AddLogging(logBuilder => logBuilder.SetMinimumLevel(LogLevel.Debug))
.BuildServiceProvider();
logger = services.GetService<ILoggerFactory>()
.AddLog4Net()
.CreateLogger<Program>();
}
static void Main(string[] args)
{
Program program = new Program();
program.Run();
Console.WriteLine("\n\nPress any key to continue...");
Console.ReadKey();
}
private void Run()
{
logger.LogInformation("Logging is working");
}
}
Désolé pour le retard!!
dans mon scénario, tout est à propos de .config
schéma. ci-dessus a été créé par .config
étendre simplement si elle me trouble. Si j'avais créé le fichier de configuration à travers le schéma ci-dessus, le code fonctionne parfaitement.