zoukankan      html  css  js  c++  java
  • log4net总结

      最近两天刚好用到了写日志的功能,这个时候就想起了log4net,网上有很多介绍这个框架的文章,我这边只是用到了三个方面的知识。1,写入文件中;2,写入数据库中;3,在控制台上显示;以下都是在VS2015,WIN7的环境下做的。

    写日志是每一个程序员都要经历的一个过程,当然一直使用公司产品的也可能不会用到。log4net作为一个开源框架,使用简易,功能强大,不过简易也是在于代码编写的过程中简易,第一次接触这些配置文件也是很麻烦的,幸好我机智找了好多相关文档来看,然后对照里面的注释找到自己需要的部分。上面的配置文档里面已经包含了我用到的所有的配置档,下面总结一下使用的方法和中间爬过的坑。

    1.当然是要引用log4net的动态链接库咯,我引用的是最新的版本,在我的理解里面一般新版本都是兼容旧版本的,不过也有例外,Python就例外。

    2.引用“Oracle.ManagedDataAccess.dll”这个动态链接库,这个地方就有坑了,我在网上找了一个哥们儿写的文章说是测试过,很有把握,我用了,其中有一部分是这样的“ <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>”,我真的是上了鬼当了,我搞了一个小时都找不到错误在哪里,然后一行一行的看,最后发现我用的是ManagedDataAccess,我是不知道他用的是是不是“Data.OracleClient.dll”这个动态库,但是大哥,你就不能多写几个字么,这个地方以后一定要注意。

    3.添加配置文档将自己需要的那些个配置文档信息复制进去,这个地方又有坑,一定一定要把这个配置文件的属性里面的复制到输出目录那个地方选为始终复制,不然等下又是找不到出错原因在哪里,反正对象是有了,调用也不报错,就是找不到对象的引用。

    private static void InitLog4Net()
    {
    var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + @"configlog4net.config");
    if (logCfg.Exists)
    XmlConfigurator.ConfigureAndWatch(logCfg);
    }

    static void Main(string[] args)
    {
    InitLog4Net();
    ILog logger = LogManager.GetLogger(typeof(Program));
    logger.Info("hello world!");

    Console.WriteLine("日志写入完成!");
    Console.ReadLine();
    }

    可以参考这一点代码,感谢这个网上大哥的指导,可以通过这个测试对象,也可以用这个创建对象。上面有调用的代码和关键信息。

    4.记一下数据库LOG表的脚本

    DROP TABLE MESMGR.LOG_LOG4NET CASCADE CONSTRAINTS;

    CREATE TABLE MESMGR.LOG_LOG4NET
    (
    LOG_ID NUMBER NOT NULL,
    LOG_DATE DATE,
    LOG_LEVEL VARCHAR2(255 BYTE),
    LOG_IDENTITY VARCHAR2(255 BYTE),
    LOG_MESSAGE NVARCHAR2(2000),
    LOG_EXCEPTION NVARCHAR2(2000),
    LOG_LOGGER NVARCHAR2(255),
    LOG_SOURCE NVARCHAR2(1000)
    )
    TABLESPACE RASPLUS_DATA_TS
    RESULT_CACHE (MODE DEFAULT)
    PCTUSED 0
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 64K
    MAXSIZE UNLIMITED
    MINEXTENTS 1
    MAXEXTENTS UNLIMITED
    PCTINCREASE 0
    BUFFER_POOL DEFAULT
    FLASH_CACHE DEFAULT
    CELL_FLASH_CACHE DEFAULT
    )
    LOGGING
    NOCOMPRESS
    NOCACHE
    NOPARALLEL
    MONITORING;

    由于Oracle是没有identity的,所以这个地方用到了Oracle的sequence,代码如下:

    DROP SEQUENCE MESMGR.LOG_LOG4NET_SEQ;

    CREATE SEQUENCE MESMGR.LOG_LOG4NET_SEQ
    START WITH 1
    MAXVALUE 999999999999999999999999999
    MINVALUE 1
    NOCYCLE
    CACHE 20
    NOORDER;

    以上就是使用过程中遇到的问题,说是总结其实都是记录错误的信息,防止以后再犯并且做一个记录,不至于以后再去网上查找。2018.1.15

  • 相关阅读:
    iOS录音后播放声音小,AudioSessionInitialize failed,AudioQueueStart failed (-50)
    NSAttributedString描述
    删除光标前的字符
    离线下载Xcode的文档
    20145209 实验五 《网络编程与安全》 实验报告
    20145209 实验四 《android开发基础》 实验报告
    20145209 实验三 《敏捷开发与XP实践》 实验报告
    20145209 实验二 《Java面向对象程序设计》 实验报告
    20145209 实验一《Java开发环境的熟悉》实验报告
    20145209 2016-2017-2 《Java程序设计》课堂实践内容
  • 原文地址:https://www.cnblogs.com/qiuyunblogs/p/8288918.html
Copyright © 2011-2022 走看看