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?

22
demandé sur Thomas Flinkow 2017-09-12 09:41:55

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>
23
répondu Irfan Ashraf 2018-06-13 11:06:13

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

13
répondu Jan Muncinsky 2018-06-02 08:15:24

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"].

0
répondu Shane 2018-06-22 16:50:12

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");
    }
}
0
répondu Jonny 2018-08-22 07:08:24

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.

-2
répondu k11k2 2018-04-19 14:39:01