.Net6 WebAPI verwendet log4net zum Aufzeichnen von Protokollen


1. Was ist log4net?

log4net ist eine .net-Klassenbibliothek, die Programmierern dabei helfen kann, Protokollinformationen an verschiedene Ziele auszugeben. Es kann problemlos in Entwicklungsprojekte geladen werden, um das Debuggen von Programmen und die Ausgabe von Protokollinformationen während der Ausführung zu realisieren, und bietet mehr Funktionen als die von .net selbst bereitgestellten Debug-Klassen und Trace-Klassen. log4net wurde von log4j übernommen, das unter Java eine hervorragende Leistung aufweist. Es ist Teil eines von der Apache Foundation finanzierten Projekts.

2. Nutzungsschritte

1. Konfigurationsdatei hinzufügen

Erstellen Sie die Konfigurationsdatei log4net.config im Stammverzeichnis
Konfigurationsdatei

Der Konfigurationsinhalt lautet wie folgt:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<!-- This section contains the log4net configuration settings -->
	<log4net>
		<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
			<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
		</appender>

		<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
			<file value="logs/Error/" />
			<appendToFile value="true" />
			<rollingStyle value="Composite" />
			<staticLogFileName value="false" />
			<datePattern value="yyyyMMdd'.log'" />
			<maxSizeRollBackups value="10" />
			<maximumFileSize value="1MB" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%date [%thread] %-5level - %message%newline" />
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="ERROR" />
				<!--配置该节点会监听的日志错误级别-->
				<levelMax value="FATAL" />
			</filter>
		</appender>

		<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender">
			<file value="logs/Warn/" />
			<appendToFile value="true" />
			<rollingStyle value="Date"/>
			<datePattern value="yyyy-MM-dd'.log'"/>
			<maxSizeRollBackups value="100" />
			<staticLogFileName value="false" />
			<encoding value="utf-8" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%date [%thread] %-5level - %message%newline" />
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="WARN" />
				<levelMax value="WARN" />
			</filter>
		</appender>

		<appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender">
			<file value="logs/Info/" />
			<appendToFile value="true" />
			<rollingStyle value="Date"/>
			<datePattern value="yyyy-MM-dd'.log'"/>
			<maxSizeRollBackups value="100" />
			<staticLogFileName value="false" />
			<encoding value="utf-8" />
			<layout type="log4net.Layout.PatternLayout">
				<!--<conversionPattern value="%newline%date [%thread %-5level] %n %m%n" />-->
				<conversionPattern value="%date [%thread] %-5level - %message%newline" />
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="TRACE " />
				<levelMax value="INFO" />
			</filter>
		</appender>

		<!-- Setup the root category, add the appenders and set the default level -->
		<root>
			<level value="ALL" />
			<appender-ref ref="ConsoleAppender" />
			<appender-ref ref="FileAppender" />
			<appender-ref ref="RollingLogFileAppender" />
			<appender-ref ref="WarnRollingFileAppender" />
			<appender-ref ref="InfoRollingFileAppender" />
		</root>

	</log4net>
</configuration>

2. Das Programm verwendet die Konfigurationsdatei

Fügen Sie Code in der Program.cs-Klasse hinzu

暂可先不引用nuget包,使用下方封装类库中间接引用即可

ILoggerRepository repository = LogManager.CreateRepository("LogRepository");
XmlConfigurator.Configure(repository, new FileInfo("Config/log4net.config"));

3. Kapseln Sie den Log4net-Vorgang

3.1 Erstellen Sie eine neue Klassenbibliothek und fügen Sie das Nuget-Paket hinzu.

Nuget-Paket

3.2 Werkzeuge

Erstellen Sie eine Werkzeugklasse
Werkzeuge
mit folgendem Inhalt:
输出时添加了日志的调用类和调用方法名,如不需要可自行删除。

public class LogUtil
{
    
    
    private static readonly ILog log = LogManager.GetLogger("LogRepository", typeof(LogUtil));

    /// <summary>
    /// 组织调用方法-日志信息
    /// </summary>
    /// <returns></returns>
    private static string GetCallerNameAndMsg(string msg)
    {
    
    
        var callerMethod = new StackFrame(2, true)?.GetMethod();
        if (callerMethod == null)
        {
    
    
            return msg;
        }

        return $"{
      
      callerMethod.DeclaringType.FullName }.{
      
      callerMethod.Name}-{
      
      msg}";
    }

    /// <summary>
    /// 日常日志
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="obj"></param>
    public static void Info(string msg)
    {
    
    
        if (log.IsInfoEnabled && !string.IsNullOrEmpty(msg))
        {
    
    
            log.Info(GetCallerNameAndMsg(msg));
        }
    }
    /// <summary>
    /// 警告日志
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="obj"></param>
    public static void Warn(string msg)
    {
    
    
        if (log.IsWarnEnabled && !string.IsNullOrEmpty(msg))
        {
    
    
            log.Warn(GetCallerNameAndMsg(msg));
        }
    }

    /// <summary>
    /// 错误日志
    /// </summary>
    /// <param name="msg"></param>
    /// <param name="obj"></param>
    public static void Error(string msg)
    {
    
    
        if (log.IsErrorEnabled && !string.IsNullOrEmpty(msg))
        {
    
    
            log.Error(GetCallerNameAndMsg(msg));
        }
    }
}

4. Anwendung

Das zu verwendende Projekt verweist auf die Common-Klassenbibliothek und die Methode kann direkt aufgerufen werden.

Common.Helper.LogUtil.Info("测试日志");

Guess you like

Origin blog.csdn.net/qq_29242649/article/details/123914406