65 votes

Comment utiliser log4net dans Asp.net core 2.0

- Je configurer log4net dans mon asp.net core 2.0 de l'application comme indiqué dans cet article le LIEN

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:\Temp\app.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é en C:\Temp\app.log répertoire. Ce serait l'erreur? comment configurer log4net pour asp.net core 2.0?

82voto

Jan Muncinsky Points 2491

Remarque il y a déjà log4net adaptateur pour ASP.NET Base de journalisation de l'interface.

La seule chose que vous devez faire est de passer l' ILoggerFactory votre Startup classe, puis d'appeler

loggerFactory.AddLog4Net();

et avoir une config en place. Si vous n'avez pas à écrire une chaudière de placage de code.

https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore

39voto

user1153909 Points 1

Je parviens à enregistrer un fichier avec 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 à 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>
 

11voto

Kwame Points 39

Toujours à la recherche d'une solution? J'ai eu le mien à partir de ce lien .

Tout ce que j'avais à faire était d'ajouter ces deux lignes de code en haut de la "public static void main" de la méthode dans le "programme de la classe".

 var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
 XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));

Oui, vous avez à ajouter:

  1. Microsoft.Extensions.La journalisation.Log4Net.AspNetCore à l'aide de NuGet.
  2. Un fichier texte avec le nom de log4net.config et modifier la propriété(Copie vers le Répertoire de Sortie) du fichier "Copier si plus Récent" ou "Copy".

Vous pouvez également configurer votre asp.net application de base de telle manière que tout ce qui est connecté à la sortie de la console sera enregistré dans le appender de votre choix. Vous pouvez également télécharger cet exemple de code à partir de github et voir comment j'ai configuré.

8voto

Jonny Points 746

Vous devez installer le package Microsoft.Extensions.Logging.Log4Net.AspNetCore NuGet et ajouter un fichier log4net.config à votre application. Alors cela devrait marcher:

 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");
    }
}
 

3voto

Shane Kenyon Points 1156

La suite sur Irfan réponse, j'ai le code XML suivant la configuration sur OSX avec .NET de Base 2.1.300 qui correctement les journaux et les ajoute à un ./log le dossier et aussi à la console. Remarque l' log4net.config doit exister dans la solution de la racine (alors que dans mon cas, mon 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 au sein d' app.config ne fonctionne pas:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net> ...

Pour une raison quelconque, le log4net nœud n'a pas été trouvé lors de l'accès à la XMLDocument via log4netConfig["log4net"].

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X