.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数据库中的更多相关文章

  1. 关于使用Log4Net将日志插入oracle数据库中

    1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> &l ...

  2. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  3. 从Excel中读取数据并批量写入MySQL数据库(基于MySQLdb)

    一.Excel内容如下,现在需要将Excel中的数据全部写入的MySQL数据库中: 二.连接MySQL的第三方库使用的是“MySQLdb”,代码如下: # -*- coding:utf-8 -*-im ...

  4. ASP.NET MVC4 Web项目中使用Log4Net记录日志到文件和数据库。

    下载与.netframework版本向对应的log4net.dll ,然后添加引用.下载地址:http://logging.apache.org/log4net/download_log4net.cg ...

  5. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  6. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

  7. ELK之收集日志到mysql数据库

    写入数据库的目的是持久化保存重要数据,比如状态码.客户端浏览器版本等,用于后期按月做数据统计等. 环境准备 linux-elk1:10.0.0.22,Kibana ES Logstash Nginx ...

  8. ELK收集日志到mysql数据库

    场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...

  9. Mysql数据库中的EXISTS和NOT EXISTS

    SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ...

  10. 如何用java POI将word中的内容导入到mysql数据库中

    由于作业需要,要求我们将word文档中的数据直接导入到mysql中,在网上找了很常时间,终于将其解决. 由于比较初级,所以处理的word文档是那种比较规范的那种,条例比较清晰,设计的思路也比较简单,就 ...

随机推荐

  1. The Managed Metadata Service or Connection is currently not available

    Does the following error message looks familiar to you?  when you go to site Actions -> Site Sett ...

  2. doT模板

    框架源码地址 https://github.com/olado/doT <div id="main"> <script id="banner-templ ...

  3. 记一次Spring aop的所遇到的问题

    由来 项目中需要实现某个订单的状态改变后然后推送给第三方的功能,由于更改状态的项目和推送的项目不是同一个项目,所以为了不改变原项目的代码,我们考虑用spring的aop来实现. 项目用的是spring ...

  4. idea在debugger模式下无法启动,但是在run模式下可以启动的问题

    debugger模式下,启动idea,总是报内存溢出异常, Error creating bean with name 'sysRoleUserMapper' defined in URL [jar: ...

  5. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...

  6. eaeyui-combobox实现组合查询(即实现多个值得搜索)

    2015年9月1日,今天要实现下拉框的组合查询功能,即可以再下拉框中选择多个值,输入框中每个值之间有逗号隔开,传到后台,由split函数将其分割开,组合成数组,在由sql查询. 实现的效果是: 当时在 ...

  7. 老方块Oracle--数值类型性能考虑

    我们在设计数据库表,或者在使用SQL,写程序时都会经常用到数值类型.比如常见的number.int.float. float是浮点类型,也属于数值类型,我们最常用的是number类型. 他的格式是nu ...

  8. Nginx静态文件路径配置

    root目录与alias目录的区别 Nginx路径location配置中,使用root目录与alias目录的区别 1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接 ...

  9. 内置函数--eval

    eval参数是一个字符串, 可以把这个字符串当成表达式来求值, 比如'x+2'就是一个表达式字符串>>> x = 2>>> print (eval('x+2'))2 ...

  10. Beam概念学习系列之SDKs

    不多说,直接上干货! https://beam.apache.org/get-started/beam-overview/ Beam SDK 提供了一个统一的编程模型,来处理任意规模的数据集,其中包括 ...