NLog记录日志到Oracle数据库

之前我们使用NLog记录日志到记事本的功能愉快的使用着,可是突然有一天领导要求统计一下报错的日志数量,茫茫记事本怎么破,于是写了个程序来读取记事本统计,这种原始的方式着实让人蛋疼,好在NLog提供了记录到数据库的功能,于是研究一番记录如下,首先把配置文件贴出来,默认位置是项目目录下的NLog.config

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <variable name="myvar" value="myvalue"/>

  <targets>
    <!--普通日志-->
    <target xsi:type="File" name="info" fileName="${basedir}/logs/log.log"
            layout="${longdate} ${uppercase:${level}} ${message}"
            maxArchiveFiles="50"
            archiveAboveSize="5242880"
            archiveNumbering="Rolling"
            />
    <!--错误日志-->
    <target xsi:type="File" name="err" fileName="${basedir}/Errors/Error.log"
            layout="${longdate} ${uppercase:${level}} ${message} --${ticks}"
            maxArchiveFiles="50"
            archiveAboveSize="5242880"
            archiveNumbering="Rolling"
            />

    <!--存入Oracle数据库-->
    <target name="database" xsi:type="Database"
              dbProvider="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess"
              connectionString="Data Source=192.168.1.100/wifi;user id=system;password=oracle"
             >
      <!--这里的插入语句,注意最后不要加分号,否则会报错。另外,Oracle中需要用":",用"@"会报错-->
      <commandText>
        <![CDATA[
        insert into bdcdataar.log4net_log(no,log_date,log_thread,log_level,log_location,log_message,log_exception,system_id) values(bdcdataar.log4net_log_seq.nextval,to_date(substr(:log_date,1,19),'yyyy-mm-dd hh24:mi:ss'),:log_thread,:log_level,:log_location,:log_message,:log_exception,'共享查询')
        ]]>
      </commandText>
      <parameter name=":log_date" layout="${longdate}"  />
      <parameter name=":log_thread" layout="${threadid}"  />
      <parameter name=":log_level" layout="${level}" />
      <parameter name=":log_location" layout="${callsite:filename=true}" />
      <parameter name=":log_message" layout="${message}" />
      <parameter name=":log_exception" layout="${exception:tostring}" />
    </target>
  </targets>

  <rules>
    <!--普通日志-->
    <logger name="*" minlevel="Trace" maxlevel="Info" writeTo="info" />
    <!--错误日志-->
    <logger name="*" minlevel="Warn" maxlevel="Fatal" writeTo="err" />
    <!--所有日志-->
    <logger name="*" minlevel="Trace" maxlevel="Fatal" writeTo="database" />
  </rules>
</nlog>
复制代码

C#创建LogHelper类,当然需要Nuget引入NLog的DLL了

复制代码
public class LogHelper
{
    public static NLog.Logger nlog = NLog.LogManager.GetCurrentClassLogger();

    /// <summary>
    /// 普通的文件记录日志
    /// </summary>
    /// <param name="info">信息</param>
    public static void WriteLog(string info)
    {
        nlog.Debug(info);
    }
}
复制代码

最重要的还是要创建数据库表了哈:

复制代码
create table bdcdataar.log4net_log
(
       no    int primary key,--序号
       log_date  date,--时间
       log_thread    int,--线程号
       log_level     varchar2(10),--日志等级
       log_location  varchar2(500),--日志位置
       log_message   clob,--消息
       log_exception clob,--异常
       system_id varchar2(50)  --系统id,用于标识不同的系统
);

create sequence bdcdataar.log4net_log_seq
minvalue 1  
maxvalue 999999999  
start with 1
increment by 1;
复制代码


说明:
1.throwExceptions是否启用抛出内部错误功能。internalLogLevel内部日志是否开启。internalLogFile内部日志路径

posted @   段江涛IT  阅读(987)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
页脚HTML代码
点击右上角即可分享
微信分享提示