前言

源码参考示例地址

http://www.51aspx.com/Code/log4netusedemo/2707

本例博客园源码

https://files.cnblogs.com/files/masonblog/Log4NetSample.zip

GitHub源码托管地址

https://github.com/catbiscuit/Log4NetSample

区别:

博客园的版本是2018-05-16 10:00:12提交的第一版本,可能存在部分问题。

GitHub托管的代码,后期本人发现代码的问题在有时间的情况下会进行相应的更新。

Log4NetFile项目

使用Log4Net记录日志到文本文件

配置信息

配置信息均保存在log4net.config文件中

注册log4net配置信息

本例使用的是web项目。
注册配置信息有两种方式
(1)本例使用的Global.asax
protected void Application_Start(object sender, EventArgs e)
{
    //注册 log4net(或者在AssemblyInfo.cs中添加注册的方法)
    System.IO.FileInfo configFile = new System.IO.FileInfo(HttpContext.Current.Server.MapPath("log4net.config"));
    log4net.Config.XmlConfigurator.Configure(configFile);
}
(2)Properties-AssemblyInfo.cs
追加一句:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

使用

(1)log4net.config文件使用的是root根配置
<!--根配置-->
<root>
    <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
    <level value="ERROR"/>
    <level value="WARN"/>
    <level value="INFO"/>
    <level value="DEBUG"/>
    <appender-ref ref="ErrorLog" />
    <appender-ref ref="WarnLog" />
    <appender-ref ref="InfoLog" />
    <appender-ref ref="DebugLog" />      
</root>
(2)在调用时使用Type获取ILog对象
public static ILog GetLogger(Type type);
示例:
//获取调用者的类属性
StackTrace trace = new StackTrace();
Type type = trace.GetFrame(1).GetMethod().ReflectedType;

log4net.ILog log = log4net.LogManager.GetLogger(type);
if (log.IsInfoEnabled)
{
    log.Info(message);
}

Log4NetOriginalSQL项目

使用Log4Net原版的数据库表进行日志的记录

可以配置日志记录的方式,下面的配置为:SqlServer和File两种方式都记录。
删除配置则不进行记录。
<appender-ref ref="AdoNetAppender_SqlServer" />
<appender-ref ref="InfoAppender" />

配置信息

配置信息均保存在log4net.config文件中

注册log4net配置信息

本例使用的是web项目。
注册配置信息有两种方式
(1)本例使用的Global.asax
protected void Application_Start(object sender, EventArgs e)
{
    //注册 log4net(或者在AssemblyInfo.cs中添加注册的方法)
    System.IO.FileInfo configFile = new System.IO.FileInfo(HttpContext.Current.Server.MapPath("log4net.config"));
    log4net.Config.XmlConfigurator.Configure(configFile);
}
(2)Properties-AssemblyInfo.cs
追加一句:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

使用

根据Log4Net.config中配置的不同获取ILog对象的方式也不同
(1)log4net.config文件使用的是root根配置
<!--根配置-->
<root>
    <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
    <level value="ERROR"/>
    <level value="WARN"/>
    <level value="INFO"/>
    <level value="DEBUG"/>
    <appender-ref ref="ErrorLog" />
    <appender-ref ref="WarnLog" />
    <appender-ref ref="InfoLog" />
    <appender-ref ref="DebugLog" />      
</root>

在调用时使用Type获取ILog对象
public static ILog GetLogger(Type type);
示例:
//获取调用者的类属性
StackTrace trace = new StackTrace();
Type type = trace.GetFrame(1).GetMethod().ReflectedType;

log4net.ILog log = log4net.LogManager.GetLogger(type);
if (log.IsInfoEnabled)
{
    log.Info(message);
}
插入数据库的内容不同(Logger为调用者的类的完整路径)
Id  
 Date                    Thread    Level    Logger                  
                 Message                            Exception
1    2018-05-15 16:53:39.093    8        INFO    Log4NetOriginalSQL.OriginalSQLAppend    2018/5/15 16:53:39:插入的内容      

(2)log4net.config文件使用的是logger配置
<logger name="sqlLogger">
    <level value="INFO"/>
    <appender-ref ref="AdoNetAppender_SqlServer"/>
</logger>
在调用时使用LoggerName获取ILog对象
public static ILog GetLogger(string name);
示例:
log4net.ILog log = log4net.LogManager.GetLogger("sqlLogger");
log.Info(message);

插入数据库的内容不同(Logger为获取时使用的LoggerName)
Id    Date                    Thread    Level    Logger        Message                            Exception
1    2018-05-15 16:53:39.093    8        INFO    sqlLogger    2018/5/15 16:53:39:插入的内容

Log4NetCustomSQL项目

使用自定义的日志类记录Log4Net日志

可以配置日志记录的方式,下面的配置为:SqlServer和File两种方式都记录。
删除配置则不进行记录。
<appender-ref ref="AdoNetAppender_SqlServer" />
<appender-ref ref="InfoAppender" />

经过测试发现InfoAppender日志只会记录自定义日志类的命名空间,所以将其注释,仅将日志记录插入到数据库中。

配置信息

配置信息均保存在log4net.config文件中

注册log4net配置信息

本例使用的是web项目。
注册配置信息有两种方式
(1)本例使用的Global.asax
protected void Application_Start(object sender, EventArgs e)
{
    //注册 log4net(或者在AssemblyInfo.cs中添加注册的方法)
    System.IO.FileInfo configFile = new System.IO.FileInfo(HttpContext.Current.Server.MapPath("log4net.config"));
    log4net.Config.XmlConfigurator.Configure(configFile);
}
(2)Properties-AssemblyInfo.cs
追加一句:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

使用

根据Log4Net.config中配置的不同获取ILog对象的方式也不同
(1)log4net.config文件使用的是root根配置(测试失败,不知道是不是配置问题)
<!--根配置-->
<root>
    <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
    <level value="ERROR"/>
    <level value="WARN"/>
    <level value="INFO"/>
    <level value="DEBUG"/>
    <appender-ref ref="ErrorLog" />
    <appender-ref ref="WarnLog" />
    <appender-ref ref="InfoLog" />
    <appender-ref ref="DebugLog" />
    <appender-ref ref="ADONetAppender_SqlServer"/>
</root>

经测试使用root配置后,
使用public static ILog GetLogger(Type type);
获取的日志操作对象,无法将日志插入到数据库中。

(2)log4net.config文件使用的是logger配置
<logger name="sqlLogger">
    <level value="INFO"/>
    <appender-ref ref="AdoNetAppender_SqlServer"/>
</logger>
在调用时使用LoggerName获取ILog对象
public static ILog GetLogger(string name);
示例:
log4net.ILog log = log4net.LogManager.GetLogger("sqlLogger");
log.Info(message);

注意的地方

(1)Log4Net.config配置文件中的自定义字段配置
其中的loyout配置,自定义字段的类的属性
格式:
<layout type = "命名空间.类名,命名空间">    
    <conversionPattern value = "%property{Event_Type} "/>
</layout>

示例:Event_Type 字段
<!-- 日志类型,这里均为3 -->
<parameter>
    <parameterName value = "@Event_Type"/>
    <dbType value = "Int32"/>
    <size value = "50"/>-->
    <layout type = "Log4NetCustomSQL.MyLayout,Log4NetCustomSQL">    
        <conversionPattern value = "%property{Event_Type} "/>
    </layout>
</parameter>

(2)Log4Net日志自定义字段
本例中的LogContent类,未做测试。
类属性与数据库日志表字段不相符(多字段或少字段)是否会报错。

(3)MyLayout和MyMessagePatternConverter 自定义字段的相关配置类
不懂什么意思,这个是直接从网上示例中复制的。

Log4Net日志的简单使用示例的更多相关文章

  1. log4net日志的简单配置

    说起来log4net,我一直都知道这个的存在,但实际在项目中还真是没有去自己写过的那,这一次我在项目完成后并没有着急下一个项目的开始,于是突然想起来是否添加一个日志的编写,于是开始了log4net的总 ...

  2. Log4net创建日志及简单扩展

    转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...

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

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

  4. 使用Log4net创建日志及简单扩展

    如何使用Log4net创建日志及简单扩展 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的 ...

  5. .Net core2.0日志组件Log4net、Nlog简单性能测试

    .Net core之Log4net.Nlog简单性能测试 比较log4net.nlog的文件写入性能(.netcore环境),涉及代码和配置如有不正确的地方,还请批评指正. 原创,转载请著名出处:ht ...

  6. Log4net 日志使用介绍

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

  7. Log4net 日志

    Log4net 日志使用介绍 概述 Log4net 有三个主要组件:loggers,appenders 和 layouts.这三个组件一起工作使得开发者能够根据信息类型和等级(Level)记录信息,以 ...

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

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

  9. C#控制台程序使用Log4net日志组件

    1.Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C# MVCWeb项目,拿控制台项目为例   项目源码在文章底部 2.首先创建一个控制台程序,引入Log4n ...

随机推荐

  1. python截取视频制作动态表情包+文字

    1:安装moviepy库 2:安装IPython库 代码如下: from moviepy.editor import * from IPython.display import Image def B ...

  2. [NOIP2013][LGOJ P1967]货车运输

    Problem Link 题目描述 A国有n座城市,编号从1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  3. C++基础知识篇:C++ 基本语法

    C++ 基本语法 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜 ...

  4. 【mq读书笔记】消息过滤机制

    mq支持表达式过滤和类过滤两种模式,其中表达式又分为TAG和SQL92.类过滤模式允许提交一个过滤类到FilterServer,消息消费者从FilterServer拉取消息,消息经过FilterSer ...

  5. Docker Vs Podman

    翻译自 Chetansingh 2020年4月24日的博文<Docker Vs Podman> [1] 容器化的一场全新革命是从 Docker 开始的,Docker 的守护进程管理着所有的 ...

  6. linux查看内存及磁盘使用情况

    1.查看当前目录 命令:   df -h       (统一每个目录下磁盘的整体情况) 2.查看指定目录 在命令后直接放目录名,比如查看"usr"目录使用情况: 命令:   df ...

  7. vue--axios分装

    封装: import axios from 'axios' axios.defaults.baseURL="http://127.0.0.1:8000/" axios.defaul ...

  8. 国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践

    ​导语 | TBase 是腾讯TEG数据平台团队在开源 PostgreSQL 的基础上研发的企业级分布式 HTAP 数据库系统,可在同一数据库集群中同时为客户提供强一致高并发的分布式在线事务能力以及高 ...

  9. PyQt(Python+Qt)学习随笔:QDockWidget停靠部件floating和features属性

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 1.floating属性 floating属性表示QDockWidge ...

  10. 理解 tf.reduce_sum(),以及tensorflow的维axis

    易错点:注意带上参数axis,否则的话,默认对全部元素求和,返回一个数值int 参考:https://www.jianshu.com/p/30b40b504bae tf.reduce_sum( inp ...