亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET系列:單元測試之Log4Net

2019-11-14 14:27:15
字體:
來源:轉載
供稿:網友

使用Log組件時,我們通常自定義ILogger接口,使用Log4Net等組件進行適配來定義不同的實現類。使用Log4Net日志組件時,為了即方便單元測試又能使用配置文件,我們通過Log4Net的ILogger接口使用Log4Net,對Log4Net進行單元測試時我們可以通過使用MemoryAppender方式測試。

1.定義ILogger接口

ILogger可以通過使用日志級別的枚舉類型精簡方法數量,也可以不適用枚舉直接定義多個方法。

public interface ILogger{    void Debug(string format, params string[] args);    void Error(string format, params string[] args);    void Fatal(string format, params string[] args);    void Info(string format, params string[] args);    void Warn(string format, params string[] args);}

2.創建使用Log4Net適配的實現類Log4NetAdapter

public class Log4NetAdapter : ILogger{    PRivate readonly ILog _rootLogger;    public Log4NetAdapter(ILog rootLogger)    {        this._rootLogger = rootLogger;    }    public void Debug(string format, params string[] args)    {        if (this._rootLogger.IsDebugEnabled)        {            _rootLogger.Debug(string.Format(format, args));        }    }    public void Info(string format, params string[] args)    {        if (this._rootLogger.IsInfoEnabled)        {            _rootLogger.Info(string.Format(format, args));        }    }    public void Warn(string format, params string[] args)    {        if (this._rootLogger.IsWarnEnabled)        {            _rootLogger.Warn(string.Format(format, args));        }    }    public void Error(string format, params string[] args)    {        if (this._rootLogger.IsErrorEnabled)        {            _rootLogger.Error(string.Format(format, args));        }    }    public void Fatal(string format, params string[] args)    {        if (this._rootLogger.IsFatalEnabled)        {            _rootLogger.Fatal(string.Format(format, args));        }    }}

3.使用MemoryAppender進行單元測試

public class Log4netAdapterTest{    private MemoryAppender _appender;    [Fact]    public void Test()    {        _appender = new MemoryAppender        {            Name = "Unit Testing Appender",            Layout = new log4net.Layout.PatternLayout("%message")        };        _appender.ActivateOptions();        var root = ((Hierarchy)log4net.LogManager.GetRepository()).Root;        root.AddAppender(_appender);        root.Repository.Configured = true;        ILogger logger = new Log4NetAdapter(log4net.LogManager.GetLogger("root"));        logger.Info("test {0}", "message");        Assert.Equal(_appender.GetEvents()[0].MessageObject.ToString(), string.Format("test {0}", "message"));    }}

4.創建Log4NetLoggerFactory

通常我們使用配置文件方式配置Log4Net,因此創建Log4NetLoggerFactory提供從配置文件中創建的ILog對象。

public class LoggerFactory{    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(LoggerFactory));    static LoggerFactory()    {        log4net.Config.xmlConfigurator.Configure();    }    public static ILogger GetLogger()    {        return new Log4NetAdapter(log);    }}

參考的配置文件

<configSections>  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /></configSections><log4net>  <root>    <level value="ALL" />    <appender-ref ref="RollingLogFileAppender" />  </root>  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">    <param name="File" value="App_Data/Logs/log.txt" />    <param name="AppendToFile" value="true" />    <param name="RollingStyle" value="Date" />    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />    <preserveLogFileNameExtension value="true" />    <datePattern value="yyyyMMdd" />    <param name="StaticLogFileName" value="false" />    <layout type="log4net.Layout.PatternLayout">      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />    </layout>  </appender></log4net>

運行結果:

4.通過依賴注入使用ILogger

asp.net項目中使用時,通過DI容器進行注入。

protected void application_Start(){    //...    ObjectFactory.AddSingleton<ILogger, Log4NetAdapter>(LoggerFactory.GetLogger());    //...}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久视频免费在线播放| 韩国三级电影久久久久久| 欧美极品美女视频网站在线观看免费| 97久久超碰福利国产精品…| 一本色道久久88精品综合| 国产欧美精品在线播放| 国产视频自拍一区| 色诱女教师一区二区三区| 久久精视频免费在线久久完整在线看| 国产精品美乳在线观看| 久久久天堂国产精品女人| 国产免费久久av| 欧美黑人一区二区三区| 91精品国产综合久久香蕉| 国产精品青草久久久久福利99| 国产精品尤物福利片在线观看| 欧美极品欧美精品欧美视频| 2020久久国产精品| 亚洲欧美国产va在线影院| 亚洲欧美国产制服动漫| 国产色视频一区| 免费97视频在线精品国自产拍| 国产综合福利在线| 最近2019好看的中文字幕免费| 中文字幕精品国产| 中文字幕免费精品一区高清| 日本视频久久久| 日韩电影中文 亚洲精品乱码| 日韩女在线观看| 中日韩午夜理伦电影免费| 在线观看欧美日韩国产| 国产在线观看精品一区二区三区| 国产精品99久久久久久久久久久久| 在线观看亚洲区| 欧美性猛交xxxx乱大交3| 欧美国产日韩视频| 久久久久久有精品国产| 8090成年在线看片午夜| 欧美黄色片免费观看| 成人黄色片在线| 免费91麻豆精品国产自产在线观看| 日韩精品在线免费观看| 91在线网站视频| 国产欧美日韩丝袜精品一区| 国语自产在线不卡| 色综合老司机第九色激情| 国产精品尤物福利片在线观看| 亚洲无限av看| 日本老师69xxx| 精品美女永久免费视频| 45www国产精品网站| 色偷偷9999www| 92版电视剧仙鹤神针在线观看| 久久青草精品视频免费观看| 亚洲精品日韩激情在线电影| 成人性教育视频在线观看| 久热精品视频在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产日韩在线精品av| 国产精品成人av在线| 久久国产精彩视频| 日韩中文字幕第一页| 538国产精品一区二区在线| 亚洲福利视频久久| 久久手机精品视频| 日韩av电影中文字幕| 91免费精品视频| 国产精品www| 国产成人av在线播放| 国产精品久久久久久久久影视| 久久精品91久久香蕉加勒比| 亚洲iv一区二区三区| 久久久久久久久久婷婷| 日本欧美在线视频| 亚洲影影院av| 亚洲第一色在线| 97人人模人人爽人人喊中文字| 91沈先生作品| 午夜精品久久久久久久99热浪潮| 欧美日韩中文在线| 一区二区三区美女xx视频| 亚洲女人天堂av| 国产精品美女免费看| 青青久久av北条麻妃海外网| 欧美日韩xxx| 91精品国产91久久| 日韩电影免费在线观看| 日韩一级裸体免费视频| 欧美韩国理论所午夜片917电影| 欧美精品一区在线播放| 久久久久久久久久av| 韩日精品中文字幕| 中文字幕亚洲色图| 日韩av一区在线| 久久久91精品| 成人性生交大片免费看小说| 欧美一级大片视频| 91爱爱小视频k| 亚洲欧美激情另类校园| 欧美高清第一页| 亚洲精品永久免费精品| 韩国精品美女www爽爽爽视频| 日本国产精品视频| 黑人与娇小精品av专区| 欧美亚洲一区在线| 国产91精品视频在线观看| 国产精品中文久久久久久久| xxav国产精品美女主播| 久久精品2019中文字幕| 色综合久久久888| 亚洲第一视频网站| 久久久亚洲欧洲日产国码aⅴ| 国产亚洲综合久久| 自拍视频国产精品| 欧美一区二区三区精品电影| 欧美日韩国内自拍| 国产91精品黑色丝袜高跟鞋| 国内精品久久久| 国产丝袜一区二区三区| 亚洲成年人在线播放| 在线亚洲午夜片av大片| 国产精品久久久999| 亚洲一区二区三区在线免费观看| 欧美午夜性色大片在线观看| 国产精品自拍偷拍| 欧美性猛交xxxx免费看漫画| 久久黄色av网站| 亚洲韩国欧洲国产日产av| 91精品国产色综合| 97精品国产97久久久久久春色| 精品福利在线看| 欧美激情a∨在线视频播放| 国产女精品视频网站免费| 国产精品美女免费视频| 97国产在线视频| 色悠悠久久88| 日韩福利伦理影院免费| 国产精自产拍久久久久久| 亚洲free性xxxx护士白浆| 国产日产久久高清欧美一区| 色综合91久久精品中文字幕| 成人中文字幕在线观看| 日韩高清电影免费观看完整| 欧美日韩亚洲国产一区| 亚洲欧美国产va在线影院| 国产成人免费av电影| 久久久人成影片一区二区三区观看| 欧美极品在线播放| 日韩中文字幕在线看| 亚洲伊人久久综合| 日韩久久免费视频| 96sao精品视频在线观看| 欧美日韩国产999| 欧美黑人一级爽快片淫片高清| 国产午夜精品全部视频在线播放| 亚洲亚裔videos黑人hd| 精品精品国产国产自在线| 91精品国产91久久久久| 最近2019中文字幕在线高清| 亚洲另类激情图| 久久久久久久久91| 欧美日韩ab片| 亚洲美腿欧美激情另类| 韩国国内大量揄拍精品视频|