最近两天刚好用到了写日志的功能,这个时候就想起了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