浅谈Log4net在项目中如何记录日志
一 引入背景
在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享,如何利用Log4net在项目中记录日志文件。在应用程序出现问题时,启用日志记录有助于解决问题。使用log4net,可以在运行时启用日志记录,而无需修改应用程序二进制文件。log4net是帮助程序员输出日志语句到各种输出目标的工具。
log4net支持如下框架:
- NET Standard 1.3 via .NET Core 1.0
- Microsoft? .NET Framework 1.0
- Microsoft .NET Framework 1.1
- Microsoft .NET Framework 2.0
- Microsoft .NET Framework 3.5
- Microsoft .NET Framework 4.0
- Microsoft .NET Framework 4.5
- Microsoft .NET Framework 3.5 Client Profile
- Microsoft .NET Framework 4.0 Client Profile
- Microsoft .NET Compact Framework 1.0
- Microsoft .NET Compact Framework 2.0
- Mono 1.0
- Mono 2.0
- Mono 3.5
- Mono 4.0
- Microsoft Shared Source CLI 1.0
- CLI 1.0 Compatible
二 log4net概述
(一)日志级别
1.级别归纳
2.级别比较
(1)级别从低=>高排序:ALL (2)日志不能记录低于最低级别的记录,如设置最低级别为Info,则低于Info的级别,都不能记录 code 测试结果 3.利用Filter过滤级别 除此之外,还能利用filter级别过滤,来设置将不同级别记录到相应文件,如将INFO级别信息记录到INFO文件中,将Error级别信息记录到Error文件中。 配置文件 后台代码 测试结果 (二)级别继承 级别继承很简单,归结为一句话:若本事设置了级别,则用自己的级别,若没设置级别,则继承离自己最近的级别。 例子1 例子2 例子3 例子4 (三)日志输出形式 1.输出文件形式归纳 2.项目中常用的输出形式 3.代码操作 3.1.在Root中定义日志输出媒介 3.2.配置具体的媒介,如下以文件形式为例 3.3.后台代码 3.4.测试结果 (四)定义日志输出格式 1.常用输出格式归纳 2.code及测试结果 三 代码实例 本示例是基于VS2017控制条程序写的。 1.后台 2.配置文件 四 推荐链接 【01】http://logging.apache.org/log4net/ 五 服务区 有喜欢的朋友,可以看一下,不喜欢的的朋友,勿喷,谢谢!!static void Main(string[] args)
{
//Log4net几种提错类型
//创建日志记录组件
ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
try
{
iLog.Debug("Debug", new Exception("Debug"));
iLog.Info("Info", new Exception("Info"));
iLog.Warn("Warn", new Exception("Warn"));
iLog.Error("Error", new Exception("Error"));
iLog.Fatal("Fatal", new Exception("Fatal"));
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
<root>
<level value="ALL" />
<appender-ref ref="LogFileInfoAppender" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />
<appender-ref ref="AdoNetAppender_Oracle" />
root>
<appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
<file value="E:/Log/log4netInfoLog.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.PatternLayout">
<footer value="by Alan_beijing" />
<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline
日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />
layout>
appender>
class Program
{
static void Main(string[] args)
{
//Log4net几种提错类型
//创建日志记录组件
ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
try
{
iLog.Debug("Debug", new Exception("Debug"));
iLog.Info("Info", new Exception("Info"));
iLog.Warn("Warn", new Exception("Warn"));
iLog.Error("Error", new Exception("Error"));
iLog.Fatal("Fatal", new Exception("Fatal"));
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using System.Reflection;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4netDemo
{
class Program
{
static void Main(string[] args)
{
//Log4net几种提错类型
//创建日志记录组件
ILog iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
try
{
iLog.Debug("Debug", new Exception("Debug"));
iLog.Info("Info", new Exception("Info"));
iLog.Warn("Warn", new Exception("Warn"));
iLog.Error("Error", new Exception("Error"));
iLog.Fatal("Fatal", new Exception("Fatal"));
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
configSections>
<appSettings>
appSettings>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="LogFileInfoAppender" />
<appender-ref ref="LogFileErrorAppender" />
root>
<logger name="log4netLevel">
logger>
<appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
<file value="E:/Log/log4netLogFile_Info.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<layout type="log4net.Layout.PatternLayout">
<footer value="by Alan_beijing" />
<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline
日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />
layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Info" />
filter>
appender>
<appender name="LogFileErrorAppender" type="log4net.Appender.FileAppender">
<file value="E:/Log/llog4netLogFile_Error.txt" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd-HH:mm:ss" />
<maximumFileSize value="10MB" />
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<footer value="by Alan_beijing" />
<conversionPattern value="记录时间:%date;文件名:%file;行号:%line;线程ID:[%thread];优先级:%priority;%newline
日志级别:%-5level;运行时间:%r;出错类:%logger property:[%property{NDC}];错误描述:%message" />
layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Error" />
<param name="LevelMax" value="Error" />
filter>
appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
layout>
appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
layout>
appender>
<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
<connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
<commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
<parameter>
<parameterName value="@logDate" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date" />
layout>
parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
layout>
parameter>
<parameter>
<parameterName value="@logLevel" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
layout>
parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
layout>
parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="240" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
layout>
parameter>
appender>
log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
startup>
configuration>