废话少说,先上代码 log4net Demo

好的系统都有日志,log4net 是我在.net平台下用过最爽的日志库,简单易用、功能强大。

  • 基于配置(配置很简单,一看就明,通用,拷去即用);
  • 可同时保存日志到文件、数据库、控制台输出;
  • 分门别类保存日志文件(消息、警告、错误、异常保存到不同的文件/文件夹下);
  • 使用后台线程;
简单配置:
  • Nuget安装log4net;
  • 配置log4net:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 文件保存日志 -->
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径: 兼容相对路径和绝对路径 -->
<param name= "File" value= "Log\simple\"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--保留天数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:20170112.log-->
<param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
</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="RollingFileAppender"/>
</root>
</log4net>
</configuration>

截图

控制台

文件

复杂配置:分门别类、同时保存日志到文件、数据库

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 信息日志类 -->
<logger name="loginfo">
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="InfoAppender" />
</logger>
<!-- 警告日志类 -->
<logger name="logwarn">
<level value="ALL" />
<appender-ref ref="WarnAppender" />
</logger>
<!-- 错误日志类-->
<logger name="logerror">
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="ErrorAppender" />
</logger>
<!-- 异常日志类-->
<logger name="logfatal">
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
<appender-ref ref="FatalAppender" />
</logger> <!-- 文件保存日志 -->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径: 兼容相对路径和绝对路径 -->
<param name= "File" value= "Log\complex\info\"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--保留天数-->
<param name= "MaxSizeRollBackups" value= "10"/>
<!--日志文件名是否固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:20170112.log-->
<param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
</layout>
</appender> <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
<param name= "File" value= "Log\complex\warn\"/>
<param name= "AppendToFile" value= "true"/>
<param name= "MaxSizeRollBackups" value= "10"/>
<param name= "StaticLogFileName" value= "false"/>
<param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
</layout>
</appender> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<param name= "File" value= "Log\complex\error\"/>
<param name= "AppendToFile" value= "true"/>
<param name= "MaxSizeRollBackups" value= "10"/>
<param name= "StaticLogFileName" value= "false"/>
<param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
</layout>
</appender> <appender name="FatalAppender" type="log4net.Appender.RollingFileAppender">
<param name= "File" value= "Log\complex\fatal\"/>
<param name= "AppendToFile" value= "true"/>
<param name= "MaxSizeRollBackups" value= "10"/>
<param name= "StaticLogFileName" value= "false"/>
<param name= "DatePattern" value= "yyyyMMdd&quot;.log&quot;"/>
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss.fff} %-5p %m%n" />
</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> <!-- 数据库保存 -->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=.;initial catalog=test_log;integrated security=true" />
<commandText value="INSERT INTO log([userid],[level],[ip],[msg],[exception]) VALUES (@userid,@level,@ip, @msg,@exception)" />
<parameter>
<parameterName value="@userid"/>
<dbType value="Int64"/>
<size value="64"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{userid}"/>
</layout>
</parameter>
<parameter>
<parameterName value="@level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@ip" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{ip}" />
</layout>
</parameter>
<parameter>
<parameterName value="@msg" />
<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> </log4net>
</configuration>

上面的AdoNetAppender附加器,是把日志保存到数据库,日志表设计:

CREATE TABLE [log](
id BIGINT IDENTITY(1,1) PRIMARY KEY,
userid BIGINT,
[level] NVARCHAR(8),
[ip] NVARCHAR(16),
msg NVARCHAR(1024),
[exception] NTEXT,
[date] DATETIME DEFAULT CURRENT_TIMESTAMP
)

截图

根据配置名生成的文件夹

基于日期生成的文件

生成的异常日志

日志保存到数据库

Log4net中的Appender类型

AdoNetAppender:利用ADO.NET记录到数据库的日志。

AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。

AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。

BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。

ConsoleAppender:将日志输出到控制台。

EventLogAppender:将日志写到Windows Event Log.

FileAppender:将日志写到文件中。

LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).

MemoryAppender:将日志存到内存缓冲区。

NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。

RemotingAppender:通过.NET Remoting将日志写到远程接收端。

RollingFileAppender:将日志以回滚文件的形式写到文件中。

SmtpAppender:将日志写到邮件中。

TraceAppender:将日志写到.NET trace 系统。

UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

ConversionPattern相关参数设置

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称,例如:

%f(file):输出语句所在的文件名。

%l(line):输出语句所在的行号。

%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式:

“记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error

System.Exception: 在这里发生了一个异常,Error Number:2036084948”

废话少说,线上代码 log4net Demo

开箱即用 - log4net 日志的更多相关文章

  1. 关于log4net日志的配置流程

    最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. ...

  2. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法

    想要让Log4net日志(以下称日志)按每月自动归类为一个文件夹,为此,学习和修改了log4net.config文件.查了资料,重点是以下这些参数:      <param name=" ...

  3. Log4net 日志使用介绍

    概述 Log4net 有三个主要组件:loggers,appenders 和 layouts.这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以及在运行时控制信息的格式化和信 ...

  4. LOG4NET日志配置及使用

    Log4net的安装 Install-Package log4net 1.先弄个日志记录的类 /// <summary> /// 使用LOG4NET记录日志的功能,在WEB.CONFIG里 ...

  5. C#中使用Log4net日志输出到本地文件、Textbox或Listview

    网上很多配置log4net的方法,但是排行靠前的 根本就没有说明清除,导致浪费了两个小时来搞清楚如何配置,真是无语,特写此文,给那些刚接触log4net的朋友 1.参考链接:http://blog.s ...

  6. Log4Net日志的配置

    <configuration>  <configSections>    <section name="log4net" type="log ...

  7. log4net 日志框架的配置

    log4net 日志框架的配置——静态文件(一) 添加对log4net程序集的引用 选择程序集文件添加引用即可,需要注意的是需要添加相应程序版本的程序集,如果你的应用是基于.netFramework2 ...

  8. [.Net MVC] 使用 log4net 日志框架

    项目:后台管理平台 意义:项目开发中提出增加日志功能,对关键的操作.程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义. 注:本文只是对网上搜集的信息进行了整合,以备今后查询. 关键字:.N ...

  9. log4net日志的配置及简单应用

    在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工 ...

随机推荐

  1. Exchange & Office 365最小混合部署

    前言 这篇文章的主题是混合部署~ 混合使得本地组织和云环境像一个单一的.协作紧密的组织一样运作.当组织决定进行混合部署,达到本地Exchange Server和Office 365共存的状态时,就会面 ...

  2. asp.net mvc文件下载

    一.zip打包下载 1.依赖引用:ICSharpCode.SharpZipLib 2.设定网站有单独文件服务器,网站目录下有虚拟路径FileFolder,通过虚拟路径将文件映射到文件服务器. 设定根据 ...

  3. mysql数据库配置文件

    一.数据库配置文件 数据库配置文件是很一个很强大的功能,这是数据库管理员经常需要关注的配置文件. my.ini  #这是在windows下的配置文件名称. my.conf  #这是在linux下的配置 ...

  4. sharepoint 2013 service pack 和 Hotfix 版本

    方法1:Central Administration > System Settings > Manage servers in your farm (/_admin/FarmServer ...

  5. 前段js初学总结

    常用的js整理 confirm("此次修改操作会清空所有基础数据!!!您确定要修改吗?") <a onclick="delBasisData('${data['_i ...

  6. ES6中map和set用法

    ES6中map和set用法 --转载自廖雪峰的官方网站 一.map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Arra ...

  7. Jmeter入门3 http请求—content-type与参数

    本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分:目前工作中涉及到的content-type 有三种: content-type:在Request Headers里, ...

  8. python第二课——数据类型1

    day02(上午)主要讲了进制问题,小编之前已经发过了 day02(下午): 1.数据类型: 分类: 1).整数型:int浮点型(小数):float布尔型(True/False):bool 2).字符 ...

  9. golang第三方库goconfig的使用

    参考地址:​http://studygolang.com/articles/818 详细的解析可以看上面链接,这里只做一点简单介绍 先安装好包,然后导入 import (    "githu ...

  10. 【openjudge】【字符串】P6374文字排版

    [描述] 给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号).请将短文重新排版,要求如下: 每行不超过80个字符:每个单词居于同一行上:在同一行的单词之间以一个空格分隔:行首和行尾 ...