惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
腾讯CDC
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
博客园 - Franky
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
B
Blog RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
L
Lohrmann on Cybersecurity
S
Schneier on Security
MyScale Blog
MyScale Blog
The Last Watchdog
The Last Watchdog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
PCI Perspectives
PCI Perspectives
博客园 - 聂微东
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Troy Hunt's Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
K
Kaspersky official blog
F
Fortinet All Blogs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
B
Blog
有赞技术团队
有赞技术团队
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Latest news
Latest news
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Help Net Security
Help Net Security
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
J
Java Code Geeks

博客园 - 乔本生涯a

用来用去还是觉得SDCMS好用 Visual 2005 调试问题 收藏 图形分析报表,在VS2005 及SQL2005 Sqlserver2000 restore database 操作异常中止 水晶报表中人民币大写的转换函数 “/”应用程序中的服务器错误。 System.IO.DirectoryNotFoundException VB.Net + asp.net的一个web系统,使用SQL2000数据库 现在运行时偶尔会出现一个奇怪现象,一个用户登录时,登录后的界面竟然是另一个用户 水晶报表效果图 一个汉字转成拼音的代码 - 乔本生涯a - 博客园 自动定时备份数据 关于动网 ASP + Access 论坛问题及相应解决办法 .Net工程中几个文件的含意 组件 访问被拒绝 --“/”应用程序中的服务器错误。IIS重启不行,系统注销也不行 使用NHibernate进行开发 - 乔本生涯a - 博客园 Log4j进行日志操作 该页无法显示 您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序。 解决方法 DataGrid表头跨行合并的实现 FreeTextBox .NET平台下WEB应用程序的部署(安装数据库和自动配置)(转)
log4net 1.2.9 的配置及使用
乔本生涯a · 2005-08-19 · via 博客园 - 乔本生涯a

下面说说我的做法,当然办法肯定不止这一个,我这个算是给新手一个指南 :)
问题是这样的,现在Log4net上公布的是1.2.9版,但是现在网上可以查到的资料都是基于1.2或一下的,这两个版本的不同在于,以前版本使用 log4net.Config.DOMConfigurator进行初始化配置,可是最新版里这个方法被弃用了,sdk文档上建议使用 log4net.Config.XmlConfigurator。可是详细的使用方法却不是很清楚,一开始我是按照以前版本的办法,没有加参数,直接放在 Application_Start方法中,当然不行……可是我对log4net的使用完全不了解,我想得先明确我的xml配置文件及使用方法没有问题。于是决定先去网上下一个以前版本的。好不容易找到一个,下载,配置……没有问题,哈~这证明就是初始化配置没有问题,于是再把版本换成1.2.9,并且拿出了厚厚的英文文档,配置着示例程序,终于弄明白该怎么使用。下面是具体的配置办法:
xml配置单独放到一个文件,我起的名字是log4net.config,然后在global.asax.cs中这样作:
protected void Application_Start(Object sender, EventArgs e)
{
//配置log4net
log4net.Config.XmlConfigurator.Configure( new FileInfo("log4net.config") );
}
使用一个FileInfo对象来指定配置文件,然后还需要加一个程序集特性
[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)]
这个是用来指定我们使用了另外的xml配置文件。
完成这两步就没有问题了。

下面说说这个的使用,初用这个时候可能会被那一大堆文档和配置节吓倒,其实如果是简单应用的话,就一点也不麻烦,像我现在在stella2中的用法,现确定你要用什么来记录日志,比如我是把日志记录在数据库中,那就到文档中去查找这方面的配置示例,之后完整的复制到你的配置文件中就可以用了,呵呵
在这里有一点要注意:
<logger name="StellaLogger">
<level value="ALL"/>
<appender-ref ref="AdoNetAppender" />
</logger>
最好是在logger节里预先取好名字,然后就可以很方便的使用,比如我这个
public class Logger : IServices.ILogger
{
//使用自己取得名字
private static log4net.ILog log=log4net.LogManager.Exists("StellaLogger");
public void LogMessage(string msg)
{
log.Info(msg);
}

void Stella2.IServices.ILogger.LogException(string note, Exception exp)
{
log.Warn(note,exp);
}

void Stella2.IServices.ILogger.DebugTime(string note, Exception exp)
{
log.Debug(note,exp);
}
}

这个类是stella forum v2.0使用的日志记录类,大家可能注意到了,这个类实现了ILogger接口,这主要是因为log4net是第三方组件,为了避免依赖,所以使用了接口隔离的办法。使用的时候直接调用接口就可以,以后你要是不喜欢log4net而转为使用ms提供的那个日志记录组件,就不需要大动干戈的,只要把接口后面的实现换掉就可以
/// <summary>
/// 记录一条信息到日志
/// </summary>
/// <param name="msg">信息</param>
public static void LogMessage(string msg)
{
IServices.ILogger logger=Factory.ServicesFactory.GetLogger();
logger.LogMessage(msg);
}