.net core 中使用Log4net输出日志到Mysql数据库中
.net core 中使用Log4net输出日志到数据库中去
1.使用Nuget安装log4net 和 mysql.data
2.设置log4net 的配置文件 log4net.config



- 可以设置多个仓库进而插入到数据不同的表中
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
	<!--Info日志-->
	<logger name="loginfo">
		<level value="INFO" />
		<appender-ref ref="AdoNetAppender_MySql"/>
	</logger>
	<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
	<appender name="AdoNetAppender_MySql" type="log4net.Appender.ADONetAppender">
		<!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
		<bufferSize value="1" />
		<!--日志数据库连接串-->
		<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
		<connectionString value="server=localhost;userid=root;pwd=123456;port=3306;database=hipmysql;SslMode=none" />
		<!--日志数据库脚本-->
		<commandText value="INSERT INTO LogDetails (LogDate,LogThread,LogLevel,LogLogger,LogActionClick,LogMessage,UserName,UserIP) VALUES (@log_date, @thread, @log_level, @logger, @ActionsClick, @message,@UserName,@UserIP)" />
		<!--日志时间LogDate -->
		<parameter>
			<parameterName value="@log_date" />
			<dbType value="DateTime" />
			<layout type="log4net.Layout.RawTimeStampLayout" />
		</parameter>
		<!--线程号-->
		<parameter>
			<parameterName value="@thread" />
			<dbType value="String" />
			<size value="100" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%t" />
			</layout>
		</parameter>
		<!--日志类型LogLevel -->
		<parameter>
			<parameterName value="@log_level" />
			<dbType value="String" />
			<size value="200" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%p" />
			</layout>
		</parameter>
		<!--日志名称-->
		<parameter>
			<parameterName value="@logger" />
			<dbType value="String" />
			<size value="500" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%logger" />
			</layout>
		</parameter>
		<parameter>
			<parameterName value="@message" />
			<dbType value="String" />
			<size value="3000" />
			<layout type="Utility.Log4net.ActionLayoutPattern">
				<!--<conversionPattern value="%message" />-->
				 <conversionPattern value="%actionInfo{Message}" />
			</layout>
		</parameter>
		<parameter>
			<parameterName value="@ActionsClick" />
			<dbType value="String" />
			<size value="4000" />
			<layout type="log4net.Layout.ExceptionLayout" />
			<!--<layout type="Log4NetApply.MyLayout" >
				<conversionPattern value = "%property{ActionsClick}"/>
			</layout>-->
		</parameter>
		<!--自定义UserName-->
		<parameter>
			<parameterName value="@UserName" />
			<dbType value="String" />
			<size value="30" />
			<layout type="Utility.Log4net.ActionLayoutPattern" >
				<conversionPattern value = "%actionInfo{UserName}"/>
			</layout>
		</parameter>
		<parameter>
			<parameterName value="@UserIP" />
			<dbType value="String" />
			<size value="20" />
			<layout type="Utility.Log4net.ActionLayoutPattern" >
				<conversionPattern value = "%actionInfo{UserIP}"/>
			</layout>
		</parameter>
	</appender>
</log4net>
</configuration>
3.在mysql 中创建对应的数据表
4.创建自定义字段的实体类
using System;
using System.Collections.Generic;
using System.Text;
namespace Utility.Log4net
{
    public class ActionLoggerInfo
    {
        public string UserName { get; set; }
        public string UserIP { get; set; }
        public string Message { get; set; }
        public ActionLoggerInfo(string username, string userip,string message)
        {
            this.UserName = username;
            this.UserIP = userip;
            this.Message = message;
        }
    }
}
5.创建转换器类ActionConverter
using System;
using System.Collections.Generic;
using System.Text;
using log4net;
using log4net.Layout;
using log4net.Layout.Pattern;
using log4net.Core;
namespace Utility.Log4net
{
    public class ActionConverter: PatternLayoutConverter
    {
        protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent)
        {
            var actionInfo = loggingEvent.MessageObject as ActionLoggerInfo;
            if (actionInfo == null)
            {
                writer.Write("");
            }
            else
            {
                switch (this.Option.ToLower())
                {
                    case "username":
                        writer.Write(actionInfo.UserName);
                        break;
                    case "userip":
                        writer.Write(actionInfo.UserIP);
                        break;
                    case "message":
                        writer.Write(actionInfo.Message);
                        break;
                    default:
                        writer.Write("");
                        break;
                }
            }
        }
    }
}
6.继承log4net 的PatternLayout ,创建自定义的属性类

using System;
using System.Collections.Generic;
using System.Text;
using log4net;
using log4net.Layout;
using log4net.Layout.Pattern;
using log4net.Core;
namespace Utility.Log4net
{
    public class ActionLayoutPattern : PatternLayout
    {
        public ActionLayoutPattern()
        {
            this.AddConverter("actionInfo", typeof(ActionConverter));
        }
    }
}
7.创建日志帮助类loghelper
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Utility.Log4net
{
    public class LogHelper
    {
        public static readonly LogHelper Instance = new LogHelper();
        private static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
        //public static log4net.ILog loginfo = LogManager.GetLogger("loginfo");
        public LogHelper() {
            string text = "";
            text = System.AppDomain.CurrentDomain.BaseDirectory + "config\\Log4Net.config";
            XmlConfigurator.ConfigureAndWatch(new FileInfo(text));
        }
        private static ActionLoggerInfo _message = null;
        private static log4net.ILog _log;
        public static log4net.ILog Log
        {
            get
            {
                if (_log == null)
                {
                    _log = LogManager.GetLogger("OperateLogger");
                }
                return _log;
            }
        }
        public static void Debug()
        {
            if (Log.IsDebugEnabled)
            {
                Log.Debug(_message);
            }
        }
        public static void Error()
        {
            if (Log.IsErrorEnabled)
            {
                Log.Error(_message);
            }
        }
        public static void Fatal()
        {
            if (Log.IsFatalEnabled)
            {
                Log.Fatal(_message);
            }
        }
        public static void Info()
        {
            if (loginfo.IsInfoEnabled)
            {
                loginfo.Info(_message);
            }
        }
        public static void Warn()
        {
            try
            {
                if (Log.IsWarnEnabled)
                {
                    Log.Warn(_message);
                }
            } catch (Exception e)
            {
                var t = e;
            }
        }
        public static void SaveMessage(string username, string userip, string message, int level)
        {
            _message = new ActionLoggerInfo(username, userip, message);
            switch (level)
            {
                case 1: Info(); break;
                case 2: Warn(); break;
                case 3: Error(); break;
                case 4: Fatal(); break;
                default: break;
            }
        }
    }
}
参考博客:
.net core 中使用Log4net输出日志到Mysql数据库中的更多相关文章
- 关于使用Log4Net将日志插入oracle数据库中
		1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> &l ... 
- C#实现MySQL数据库中的blob数据存储
		在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ... 
- 从Excel中读取数据并批量写入MySQL数据库(基于MySQLdb)
		一.Excel内容如下,现在需要将Excel中的数据全部写入的MySQL数据库中: 二.连接MySQL的第三方库使用的是“MySQLdb”,代码如下: # -*- coding:utf-8 -*-im ... 
- ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。
		下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ... 
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
		JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ... 
- 使用sqoop将MySQL数据库中的数据导入Hbase
		使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ... 
- ELK之收集日志到mysql数据库
		写入数据库的目的是持久化保存重要数据,比如状态码.客户端浏览器版本等,用于后期按月做数据统计等. 环境准备 linux-elk1:10.0.0.22,Kibana ES Logstash Nginx ... 
- ELK收集日志到mysql数据库
		场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ... 
- Mysql数据库中的EXISTS和NOT EXISTS
		SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ... 
随机推荐
- jQuery插件的2种类型
			1.封装方法插件 封装方法插件在本质上来说,是一个对象级别的插件,这类插件首先通过jQuery选择器获取对象,并为对象添加方法,然后,将方法进行打包,封闭成一个插件,这种类型的插件编写简单,极易调用 ... 
- 【WC2014】紫荆花之恋(替罪羊重构点分树 & 平衡树)
			Description 若带点权.边权的树上一对 \((u, v)\) 为 friend,那么需要满足 \(\text{dist}(u, v) \le r_u + r_v\),其中 \(r_x\) 为 ... 
- Spring AOP的理解(通俗易懂)。
			转载 原文链接:http://www.verydemo.com/demo_c143_i20837.html 这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 1. ... 
- ubuntu 16.04安装adobe reader
			终端输入:wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb s ... 
- VMware提示Device/Credential Guard不兼容
			问题环境 win10系统版本 win10 2004企业版 vmware 版本 vmware 15 pro 问题 虚拟机开启时候弹窗提示:"VMware与Device/Credential G ... 
- vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)
			第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ... 
- 最详细10招Spark数据倾斜调优
			最详细10招Spark数据倾斜调优 数据量大并不可怕,可怕的是数据倾斜 . 数据倾斜发生的现象 绝大多数 task 执行得都非常快,但个别 task 执行极慢. 数据倾斜发生的原理 在进行 shuff ... 
- Numpy的学习3-索引
			import numpy as np A = np.arange(3, 15) # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) print(A[3 ... 
- javaweb练手项目jsp+servlet简易购物车系统
			简易购物车项目 这是一个用intellij IDEA做的简易的javaweb项目,开发环境使用的jdk1.8和tomcat8以及mysql数据库. 1.项目开发准备: 创建github仓库 项目框架搭 ... 
- Gradle AndroidStudio内网离线构建配置踩坑记录
			最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ... 
