您的位置:首页 > 其它

TinyFrame升级之六:全局日志的设计及实现

2014-04-15 22:53 936 查看
日志记录显然是框架设计中不可或缺的元素,在本框架中,我们将使用log4net作为日志记录的主体。下面来具体说明如何让框架继承log4net,并通过Autofac进行IOC注入。

首先,定义好我们的Log日志操作接口:

publicinterfaceILoggerService

[code]{
voidInfo(stringmessage);

voidWarn(stringmessage);

voidDebug(stringmessage);

voidError(stringmessage);

voidError(Exceptionex);

voidFatal(stringmessage);

voidFatal(Exceptionex);

}

[/code]

具体的解释我就不用说了,其中Info代表正常日志,Warn代表告警日志,Debug代表调试日志,Error代表错误日志,Fatal代表系统崩溃日志。

下面是其实现部分:

publicclassLoggerService:ILoggerService

[code]{
publicLoggerService()

{

log4net.Config.XmlConfigurator.Configure();

logger=LogManager.GetLogger(typeof(LoggerService));

}


privatereadonlyILoglogger;


publicvoidInfo(stringmessage)

{

logger.Info(message);

}

publicvoidWarn(stringmessage)

{

logger.Warn(message);

}

publicvoidDebug(stringmessage)

{

logger.Debug(message);

}

publicvoidError(stringmessage)

{

logger.Error(message);

}

publicvoidError(Exceptionex)

{

logger.Error(ex.Message,ex);

}

publicvoidFatal(stringmessage)

{

logger.Fatal(message);

}

publicvoidFatal(Exceptionex)

{

logger.Fatal(ex.Message,ex);

}

}

[/code]

我在构造中对log4net进行了配置,同时获取了log4net的日志记录对象。我们的配置需要写到用户接口中的web.config文件中:

<configSections>

[code]<sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>


<log4net>

<root>

<levelvalue="DEBUG"/>

<appender-refref="LogFileAppender"/>

</root>

<appendername="LogFileAppender"type="log4net.Appender.RollingFileAppender">

<paramname="File"value="C:\log.txt"/>

<paramname="AppendToFile"value="true"/>

<rollingStylevalue="Size"/>

<maxSizeRollBackupsvalue="10"/>

<maximumFileSizevalue="10MB"/>

<staticLogFileNamevalue="true"/>

<layouttype="log4net.Layout.PatternLayout">

<paramname="ConversionPattern"value="%-5p%d{yyyy-MM-ddhh:mm:ss}–%m%n"/>

</layout>

</appender>

</log4net>

[/code]

之后在Aufofac中注入一下:

builder.RegisterType<LoggerService>().As<ILoggerService>().InstancePerHttpRequest();

最后,在页面中,我们可以通过构造函数获取其实例:


publicBookService(IUnitOfWorkunitOfWork

[code],IBookbookRepository
,IBookTypebookTypeRepository

,IBookPlacebookPlaceRepository

,ICacheManagercacheManager

,ILoggerServicelogger

)

{

this.unitOfWork=unitOfWork;

this.bookRepository=bookRepository;

this.bookTypeRepository=bookTypeRepository;

this.bookPlaceRepository=bookPlaceRepository;

this.cacheManager=cacheManager;

this.logger=logger;

}


privatereadonlyIUnitOfWorkunitOfWork;

privatereadonlyIBookbookRepository;

privatereadonlyIBookTypebookTypeRepository;

privatereadonlyIBookPlacebookPlaceRepository;

privatereadonlyICacheManagercacheManager;

privatereadonlyILoggerServicelogger;

[/code]

得到的日志结果如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: