c#用log4Net将日志写入到Oracle数据库,并写入到文件中

原文:c#用log4Net将日志写入到Oracle数据库,并写入到文件中

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_37913923/article/details/79072898

1.从官网下载log4net包,安装到项目中;

2.配置文件log4net.config/app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient"/>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
    </DbProviderFactories>
  </system.data>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true "/>
    <add key="DbProvider" value="System.Data.SqlClient"/>
  </appSettings>

  <log4net>
    <appender name="AdoNetMysql" type="log4net.Appender.AdoNetAppender,log4net">
      <bufferSize value="2"/>
      <param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>
      <param name="ConnectionString" value="Server=DESKTOP-QJVL170;Uid=root;Pwd=zws_321;Database=bjdata_zs;Connect Timeout=120; character set=utf8;Use Affected Rows=true;"/>
      <commandText value="INSERT INTO mylog(id,log_datetime,log_thread,log_level,log_logger,log_message) VALUES (null,@log_date, @thread, @log_level, @logger, @message)"/>
      <parameter>
        <parameterName value="@log_date"/>
        <dbType value="DateTime"/>
        <layout type="log4net.Layout.PatternLayout" value="%d{yyyy-MM-dd HH:mm:ss}"/>
      </parameter>
      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout"  value="%thread">
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout"  value="%log_level">
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout"  value="%logger">
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <layout type="log4net.Layout.PatternLayout"  value="%message">
        </layout>
      </parameter>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="Info" />
        <levelMax value="Fatal" />
      </filter>
    </appender>
    <appender name="ADONetAppender_Oracle" type="log4net.Appender.ADONetAppender">
      <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->
      <bufferSize value="0" />
      <!--日志数据库连接串-->
      <!--<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />-->
      <connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
      <!--<connectionString value="Data Source=//59.110.46.189:1521/TestOracle;User ID=TestUser;Password=TestUser;" />-->
      <connectionString value="User ID=TestUser;Password=TestUser;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =59.110.46.189)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME =TestOracle )))"/>
      <!--<connectionString value="Data Source=TestOracle;User ID=TestUser;Password=TestUser;SERVER=59.110.46.189;" />-->
      <!--日志数据库脚本-->
      <!--<commandText value="INSERT INTO BJ_LogDetails (LogDate,LogThread,LogLevel,LogLogger,LogActionClick,LogMessage,UserName,UserIP) VALUES (‘20180112‘, ‘3‘, ‘info‘, ‘567657‘, ‘delete‘, :LOG_MESSAGE,‘zs‘,‘127.0.0.1‘)" />-->
      <commandText value="INSERT INTO BJ_LOGDETAILS (LogDate,LogThread,LogLevel,LogLogger,LogActionClick,LogMessage,OPERAND) VALUES (:LogDate,:LogThread,:LogLevel,:LogLogger,:ActionsClick,:Message,:Operand)" />
       <!--日志时间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="@ActionsClick" />
      <dbType value="String" />
      <size value="4000" />
        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog" >
        <conversionPattern value = "%property{ActionsClick}"/>
      </layout>
    </parameter>
      <parameter>
        <parameterName value="@Message" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          <conversionPattern value="%property{Message}" />
        </layout>
      </parameter>
   <!--操作对象-->
      <parameter>
        <parameterName value="@Operand" />
        <dbType value="String" />
        <size value="300" />
        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          <conversionPattern value="%property{Operand}" />
        </layout>
      </parameter>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <!--定义文件存放位置-->
      <file value="log\\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyyMM\\yyyyMMdd‘.txt‘"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="==== %date [%thread] %-5level ==== : %newline%message%newline%newline" />
      </layout>
    </appender>
    <!--配置到数据库-->
    <appender name="ADONetApp" type="log4net.Appender.ADONetAppender,log4net">
      <!--BufferSize为缓冲区大小-->
      <bufferSize value="10" />

      <!--<param name="BufferSize" value="2" />-->
      <!--引用-->
      <param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"/>
      <!--连接字符串-->
      <param name="ConnectionString" value="Server=DESKTOP-QJVL170;Uid=root;Pwd=zws_321;Database=bjdata_zs;Allow Zero Datetime=True;character set=utf8;"/>
      <!--插入语句-->
      <commandText value="INSERT INTO sys_error_log(Message) VALUES (‘sdfd‘)" />
      <!--记录时间-->
      <!--<parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>-->
      <!--线程号-->

      <!--消息-->
      <parameter>
        <parameterName value="@Message" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
          <conversionPattern value="%property{Message}" />
        </layout>
      </parameter>
    </appender>

    <root>
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="ADONetAppender_Oracle"/>
      <!--记录到什么介质中-->
    </root>
    <!--使用反射方法同时写两文件和数据库-->
    <logger name="writLogger">
      <level value="ALL"/>
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="ADONetAppender_Oracle"/>
    </logger>

  </log4net>
  <connectionStrings>
    <add name="OraConnString1" connectionString="User ID=TestUser;Password=TestUser;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =59.110.46.189)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME =TestOracle )))"/>
    <add name="OracleTarget" connectionString="User ID=TESTUSER;Password=TestUser;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST =59.110.46.189)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME =BJWARE )))"/>
  </connectionStrings>
</configuration>

3.c#代码的调用:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            log4net.Config.XmlConfigurator.Configure();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ILog log1 = LogManager.GetLogger("writLogger");

            ILog log11 = LogManager.GetLogger("writLogger");
            log11.Info(new LogInfo("1","wgh","s","登陆"));
            log1.Info(new LogMessage(1, (int)TGLog.ActionType.Other, "测试数据"));
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }

4.数据库表结构如下:

CREATE TABLE "TESTUSER"."BJ_LOGDETAILS"
   (	"LOGID" NUMBER,
	"LOGDATE" DATE,
	"LOGTHREAD" NVARCHAR2(100),
	"LOGLEVEL" NVARCHAR2(200),
	"LOGLOGGER" NVARCHAR2(500),
	"LOGMESSAGE" NVARCHAR2(2000),
	"LOGACTIONCLICK" NVARCHAR2(400),
	"OPERAND" NVARCHAR2(400)
   )

PS:1.配置文件中,不需要的参数必须注释或者删除,否则写入不到数据库中;

2.确保链接字符串,SQL语句的正确率;

3.确保oracle数据库版本正确,确保log4net包版本正确;

4.调试阶段,可以跟踪ILog中的参数是否全部为true;

如有错误,希望指出;共同进步!

原文地址:https://www.cnblogs.com/lonelyxmas/p/11650721.html

时间: 2024-10-08 09:45:18

c#用log4Net将日志写入到Oracle数据库,并写入到文件中的相关文章

【翻译自mos文章】当NFS server 宕机后,Oracle 数据库 冻结并且alert 文件里没有任何错误

当NFS server 宕机后,Oracle 数据库 冻结并且alert 文件里没有任何错误 翻译自mos文章:When NFS Server Is Down, Oracle Server Freezes With No Errors In Alert Log File (文档 ID 1316251.1) 适用于: Oracle Server - Enterprise Edition - Version: 10.2.0.4 and later   [Release: 10.2 and later

Oracle数据库date类型与Java中Date的联系与转化

以下是对Java中的日期对象与Oracle中的日期之间的区别与联系做点说明,以期对大家有所帮助.new Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),就是系统当前.new Date(long date) : 分配 Date 对象并初始化此对象,以表示自从标准基准时间    (称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数.long getTime() :返回自 1970 年 1 月 1 日 00:00

JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件

******JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件****** package com.bo.test; import java.io.FileOutputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import

PlSql链接Oracle数据库对tnsnames.ora文件的配置

1.打开tnsnames.ora文件的位置 D:\ora_product\11.2.0\dbhome_1\NETWORK\ADMIN 2.文件中写入 ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) 108_XRORCL = (DESCRIPTION = (A

ORACLE数据库物理结构之物理文件(v$logfile,v$datafile,v$controlfile,v$arcguved_log,v$parameter,密码文件,告警文件)位置

DATABAE=物理文件.构成物理文件的逻辑结构 查看数据库名 SQL> show parameter db_nam NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_name                              string      gaga01

Oracle 数据库导入导出 dmp文件

首先询问对方数据库的表空间名称和大小,然后在你的oracle中建立相应表空间,最后使用命令导入.导出数据.补充:1.要新建一个数据库: Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可 以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本 地导入到远处的数据库服务器中. 利用这个功能可以构建两个相同的数据库,一 个用来测试,一个用来正式使用.例如:imp命令导入数据:imp username/[email protected]SI

Oracle数据库表空间 数据文件 用户 以及表创建的SQL代码

--create the tablespace CREATE SMALLFILE TABLESPACE "TABLE_CONTAINER" --创建表空间 DATAFILE 'E:\ORACLE\ORADATA\ORCL\table_01.DBF' --建立数据文件,数据文件的文件位置 SIZE 100M --数据文件的初始大小 AUTOEXTEND ON NEXT 100M --数据文件增量大小 MAXSIZE UNLIMITED --数据文件大小无限制 LOGGING EXTENT

VS建立的Winform程序中连接Oracle数据库能正常运行在Web中却不能正常连接运行可能原因(本文来自博客园深蓝居)

我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个VS调试程序.最近遇到的一个问题就是一个同事换了一个电脑,用的是X64的Windows 2008作为操作系统,要进行Oracle的数据库连接,所以也装了64位的Oracle客户端.如果是控制应用项目或者WinForm项目可以正常连接Oracle,但是Web项目在程序中打开Oracle连接时,系统抛出了异常: 尝试加载 Oracle 客户端库时引发 BadImageF

2017年2月21日 Oracle数据库,怎么设置表中主键的自增

1.新创建一张表,设置id为主键 例如,创建的表名为:uf_receive_pay 2.设置ID的主键自增,通过Sequence实现 创建Sequence CREATE SEQUENCE uf_receive_pay_Seq     INCREMENT BY 1   -- 每次加几个       START WITH 1     -- 从1开始计数       NOMAXVALUE       -- 不设置最大值       NOCYCLE          -- 一直累加,不循环