log4net日志框架
在解决方案的nuget包中安装此包,并在web.config和app.config中进行配置。
简介
简单理解,若不是很感兴趣可跳过。
首先,需要在xml文档中的configuration节点中进行log4net向导配置,意在声明log4net。
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
</configuration>
configSections节点在这里就是声明了section的log4net项,并指定了类型和它运行的实例:log4net.
在此文件的下面,就需要对log4net实例作为节点进行书写。
<log4net>
<!--log根节点配置-->
<root>
<!--指定日志级别-->
<level value="INFO"></level>
<!--呈现日志的方式:文件方式-->
<appender-ref ref="FileAppender"/>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!--文件名指定-->
<file value="log.txt"></file>
<!--线程锁指定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--指定输出格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger -%message%newline"/>
</layout>
</appender>
</root>
</log4net>
每一层都可以单独的看作一个节点,每一个标签也可以同样使用。
root节点:可以看作是日志的基本配置,即该日志配置属于全局的整个基础配置。
level节点:用于指定 日志级别,这里是info级别(info,error,warning,debug,fatal)
appender-ref节点:用于指定日志的输出平台是console(控制台💻 ),还是File(文件📓)形式。
appender节点:记录信息的名字,即appender-ref节点引用节点,它所实现的就是记录方式,记录时机。
file节点:用于日志文件名的记录。
lockingModel节点:线程锁的指定(常见于日志文件io)。
layout节点:日志文件内容格式的配置。
conversionPattern节点:日志格式规定。
以上是log4net的节点规定,若感兴趣可以去官网文档进行查阅。
参加一:[翻译]log4net教程 (shuzhiduo.com)
参见二:Apache log4net – Apache log4net: Config Examples - Apache log4net
日志输出方式基础分3种:
- 数据库日志
- 文件日志
- 控制台日志
文件输出格式配置
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
</configuration>
<log4net>
<!--log根节点配置-->
<root>
<!--指定日志级别-->
<level value="INFO"></level>
<!--呈现日志的方式:文件方式-->
<appender-ref ref="FileAppender"/>
<!---->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!--文件名指定-->
<file value="log.txt"></file>
<!--线程锁指定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--指定输出格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger -%message%newline"/>
</layout>
</appender>
</root>
</log4net>
控制台配置
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<!--log根节点配置-->
<root>
<!--指定日志级别-->
<level value="INFO"></level>
<!--呈现日志的方式:文件方式-->
<appender-ref ref="FileAppender"/>
<appender-ref ref="ConsoleAppender"/>
<!---->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!--文件名指定-->
<file value="log.txt"></file>
<!--线程锁指定-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<!--指定输出格式-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger -%message%newline"/>
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE}[%thread] %level %logger - %message%newline"/>
</layout>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
</root>
</log4net>
</configuration>
数据库配置
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<param name="File" value="c:\Log\DBLog.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="10"/>
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<!--连接数据库串-->
<connectionString value="server=.;database=ZYC;user id=sa;password=123456"/>
<!--sql语句-->
<commandText value="INSERT INTO Log ([_Date],[Thread],[_Level],[Logger],[_Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"/>
<!--参数声明-->
<parameter>
<parameterName value="@log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value="@thread"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value="@log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
<parameter>
<parameterName value="@exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter>
<!--参数声明-->
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
</root>
</log4net>
小插曲❌ :对这个config这一大戳稍微概括一下:
configSections相当于一个声明:告知配置文件如下有log4net这一个配置集合。
log4net:里面则是所有的配置,结构如下:
root节点:用于声明不同的日志输出种类([控制台,文件,数据库] 在root节点【通过appender-ref节点】中又一次的声明,日志等级(变量))
appender进行不同日志平台输出的参数格式编写。
重点,操作不当,日志不见效。
找到解决方案文件下面的Properties/AssemblyInfo.cs。在里面书写代码。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]
ConfigFile用于告知log4net的配置文件位置,这里建议单独为其指定,层次更分明。
按需求,在.cs文件下进行如下:
using log4net;
public class Mylog{
public static log4net.ILog myLogger;
static Mylog(){
myLogger = log4net.LogManager.GetLogger(typeof(Mylog));
}
public void LogInfo(){
myLogger.Info("hello");
myLogger.Error("hello");
myLogger.Debug("hello");
myLogger.Fatal("hello");
}
}
会根据输出方式,进行输出。