引言:我们在工作中经常会debug调试打log监测程序运行状况,在生产环节也会要求有相应的日志来查看当前的程序运行状况。遇到了错误我们也可以调用日志来查看是哪个环节出了错误,Log4Net就是用来输出日志的。Log4Net可以输出到文件中也可以输出到数据库中,接下来我们就记录下这两种方式。
准备工作:首先通过NuGet安装Log4Net
注意事项:
1.若要写入Mysql数据库中,首先要添加MySql.Data的引用(可通过NuGet安装)
2.若要写入SqlServer数据库,首先要添加System.Data的引用
以上两个dll右击属性将复制本地改为True,否则在调试的时候会写入数据库失败。
3.在项目中添加log4net.config文件,右击属性复制到输出目录的选项改成如果较新则复制
4.在下文中的输出到控制台在放在配置文件的Root字段中的,所以它会输出所有的日志信息,如果不需要可删除appender-ref属性
5.每个配置属性中都设置了最大输出等级和最小输出等级,可根据自己的项目需求选择性的输出日志信息
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Fatal" />
</filter>
6.输入数据库的日志中connectionString里面的value的值就是连接项目数据库的,这个要根据自己需求修改
7.输入数据库的日志中commandText里面的value的值要自己对应自己的数据库表
譬如insert into Logs(dt,Thread,Level,Logger,Message)表示插入logs表中5个字段,请自己建表的时候要对应这句sql语句,或者也可以修改这句sql语句对应你的数据库表
log4net配置文件信息(包含了输出到控制台,输出到文件,输出到mysql,输出到sqlserver):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="SqlServerAdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection,System.Data" />
<connectionString value="Server=KEBAO-PC;Database=BillDB;Trusted_Connection=True;" />
<commandText value="insert into Logs(dt,Thread,Level,Logger,Message) values(@log_date,@thread, @log_level, @logger, @message)" />
<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>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Fatal" />
</filter>
</appender>
<appender name="MysqlAdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<connectionString value="database=AccountManager;server=localhost;Uid=root;Pwd=1234;" />
<commandText value="insert into log(Date,Thread,Level,Logger,Message) values(@log_date,@thread, @log_level, @logger, @message)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
<!--<layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss}" />-->
</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>
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<file value= "./service.log"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--log备份文件数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:2018-06-30.log-->
<param name= "DatePattern" value= "yyyy-MM-dd".log""/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
</layout>
</appender>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="Info" />
<foreColor value="Green" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Fatal" />
</filter>
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<level value="All" />
<appender-ref ref="ColoredConsoleAppender"/>
</root>
<logger name="SqlServerLog">
<level value="ALL" />
<appender-ref ref="SqlServerAdoNetAppender"/>
</logger>
<logger name="MysqlLog">
<level value="ALL" />
<appender-ref ref="MysqlAdoNetAppender"/>
</logger>
<logger name="FileLog">
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender"/>
</logger>
</log4net>
</configuration>
代码如下:
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Log4Net
{
class Program
{
private readonly static ILog _log = LogManager.GetLogger(typeof(Program));
private readonly static ILog _sqlserverlog = LogManager.GetLogger("SqlServerLog");
private readonly static ILog _mysqllog = LogManager.GetLogger("MysqlLog");
private readonly static ILog _filelog = LogManager.GetLogger("FileLog");
static void Main(string[] args)
{
var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
XmlConfigurator.ConfigureAndWatch(logCfg); //加载配置文件
_log.Info("AllLog");
_sqlserverlog.Info("SqlServerAdoNetAppender");
_mysqllog.Info("MysqlAdoNetAppender");
_filelog.Info("RollingLogFileAppender");
Console.ReadLine();
}
}
}
注意:
1.输出到控制台的信息是因为ColoredConsoleAppender写在了配置文件的Root字段中了
2.如果是在asp.net MVC中写日志,则在Global.asax.cs文件的Application_Start函数中添加:
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("Log4net.config")));
输出结果: | ![]() |
个人订阅号: | ![]() |