Log4net入门使用
简介
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。
经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。
官方网站:http://logging.apache.org/log4net/
使用方法
第一步:Log4net的安装
Install-Package log4net
第二步:Log4net的配置
log4net.config
注意:将log4net.config的属性“复制到输出目录”设置为“始终复制”
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "D:\App_Log\"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--log保留天数-->
<param name= "MaxSizeRollBackups" value= ""/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:--.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"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>
第三步:调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; using log4net;
using log4net.Config; namespace Log4net
{
class Program
{
static void Main(string[] args)
{
InitLog4Net(); var logger = LogManager.GetLogger(typeof(Program)); logger.Info("消息");
logger.Warn("警告");
logger.Error("异常");
logger.Fatal("错误"); Console.ReadLine();
} private static void InitLog4Net()
{
var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
XmlConfigurator.ConfigureAndWatch(logCfg);
}
}
}
深入理解Log4net的结构
log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).
外部Blog资源:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html
日志写入数据库
在实际开发过程中,应该将报错都写到数据库里,方便查询
第一步:同上面,安装log4net,创建log4net.config
注意:
1、将log4net.config的属性“复制到输出目录”设置为“始终复制”
2、connectionString 配置成自己的数据库
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
<bufferSize value="0" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=.\SQLExpress;initial catalog=YinCai;integrated security=false;persist security info=True;User ID=sa;Password=123" />
<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>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<level value="all" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
</configuration>
第二步:创建数据库
CREATE TABLE [dbo].[Log] (
[Id] [int] IDENTITY (, ) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] () NOT NULL,
[Level] [varchar] () NOT NULL,
[Logger] [varchar] () NOT NULL,
[Message] [varchar] () NOT NULL,
[Exception] [varchar] () NULL
)
第三步:Properties 属性下面的AssemblyInfo.cs 追加( 必须有这个,否则写入不到数据库中)
//注意: ConfigFile 可以指定相对路径 和 绝对路径。 eg: /log/xxxx.log 或者 d://log//xxxx.log
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
第四步:.NET MVC 下,在App_Start -- FilterConfig下配置全局
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//应用程序启动时,自动加载配置log4Net
XmlConfigurator.Configure();
}
}
第五步:测试
public ActionResult Index()
{
var logger = LogManager.GetLogger(typeof(HomeController));
logger.Info("消息"); logger.Warn("警告");
logger.Error("异常");
logger.Fatal("错误"); return View();
}
上面都是Log4Net自带的字段,有时这几个字段不能满足我们记录日志的需求,因而,我们想要多增加几个字段。
1、数据库多增加两个字段,如:
[ModuleName] [varchar] () NULL,
[UserName] [varchar] () NULL
2、修改log4net.config命令文本
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[ModuleName],[UserName]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @module_name, @user_name)" />
3、为自定义列添加参数定义
<parameter>
<parameterName value="@module_name"/>
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{ModuleName}" />
</layout>
</parameter> <parameter>
<parameterName value="@user_name"/>
<dbType value="String" />
<size value="" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{UserName}" />
</layout>
</parameter>
4、log4net.LogicalThreadContext.Properties 添加自己新增的属性
public ActionResult Index()
{
var logger = LogManager.GetLogger(typeof(HomeController)); log4net.LogicalThreadContext.Properties["ModuleName"] = "订单模块";
log4net.LogicalThreadContext.Properties["UserName"] = "admin";
logger.Info("消息"); logger.Warn("警告");
logger.Error("异常");
logger.Fatal("错误"); return View();
}
如果数据里没有数据,请检查
1、配置文件log4net.config配置了root
<appender-ref ref="AdoNetAppender" />
2、log4net.config 始终复制
3、检查配置文件数据库的链接
4、是否漏了第三步Properties
Log4net入门使用的更多相关文章
- Log4net入门(帮助类篇)
在前几篇Log4net入门文件的讲述过程中,我们在使用log4net的类中都要编写如下一行代码: private static log4net.ILog log = log4net.LogManage ...
- Log4net入门(WCF篇)
在上一篇Log4net入门(ASP.NET MVC 5篇)中,我们讲述了如何在ASP.NET MVC 5项目中使用log4net.在这一篇中,我们将讲述如何在WCF应用中使用log4net,为了讲述这 ...
- Log4net入门(ASP.NET MVC 5篇)
在前4篇Log4net入门文章中,我们讲述了log4net的一些简单用法,在这一篇中我们主要讲述如何在ASP.NET MVC 5项目中将日志信息写入SQL Server数据库中. 一.创建最简单的AS ...
- Log4net入门(SQL篇)
我们在Log4net入门(回滚日志篇)中详细讲述了如何将日志信息输出到日志文件中,在这一篇中,我们将讲述如何将日志文件写入SQL Server数据库,以方便我们分析统计日志信息. 首先,我们在SQL ...
- Log4net入门(日志文件篇)
在上一篇Log4net入门(控制台篇)中,我们将日志信息输出到控制台中,在这一篇中,我们将描述如何将日志信息写到文件中.要将日志信息写入文件非常简单,只需要在Log4net.config配置文件中添加 ...
- 记录日志好习惯——Log4net入门(WCF篇)
本篇是在学习了“编码之道”的Log4net入门(WCF篇)http://www.cnblogs.com/yonghuacui/p/6181864.html之后,总结了一些自认为比较重要的细节.顺便把创 ...
- Log4net入门(回滚日志文件篇)
在上一篇Log4net(日志文件篇)中,我们使用"log4net.Appender.FileAppender"将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会 ...
- Log4net入门(控制台篇)
Log4net是Apache公司的log4j™的.NET版本,用于帮助.NET开发人员将日志信息输出到各种不同的输出源(Appender),常见的输出源包括控制台.日志文件和数据库等.本篇主要讨论如何 ...
- log4net入门
简介 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日志 ...
随机推荐
- Python 学习第十七天 jQuery
一,jQuery 知识详解 利用jquery 查找元素,操作元素 1,jquery 引入 <!DOCTYPE html> <html lang="en"> ...
- scrapy爬虫结果插入mysql数据库
1.通过工具创建数据库scrapy
- nginx:文件下载指定保存文件名的配置
一般在我们上传完资源文件之后,为了避免文件名冲突,会将文件名改成毫无意义的一段字符.这个字符,可能是MD5产生的,或者是其他方式产生的字符串.这时候,下载的时候,默认保存的文件名会是这段毫无意义的文件 ...
- yotaku的开发日志(1)
2015-12-18 21:17:46 连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制. 相关代码如下: 数据库 用户表(管理员) mg_id mg_name mg_pwd m ...
- c#比较两个List相等
1.if(ListA.Count == ListB.Count && ListA.Count(t => !ListB.Contains(c)) == 0) 数量相等,元素值相等即 ...
- [8.1] Triple Step
A child is running up a staircase with n steps and can hop either 1 step, 2 steps, or 3 steps at a t ...
- 四道简单DP
DP类题目找到子问题(状态),然后找到转移方程,就OK #dp #likes matrixchain #according to two point's distance to recurrence ...
- 【枚举】POJ 3279
直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变 ...
- java 测试:iterator foreach for 三种迭代方式哪种更快?
代码: public class main { public static void main(String[] p_args){ ArrayList<String> _l_string ...
- 如何对tableview进行自定义多选
前言: 很多入门不久的程序员或许都会遇到系统自带的tableview多选时cell选择时不能选择自己想要的点击时的颜色或者图片,这让初级开发者们很烦恼.今天,我试着花了几个小时的时间用了自己的想法,去 ...