使用了log4net,发布系统后,发现无法写日志了,怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用了log4net,发布系统后,发现无法写日志了,怎么办相关的知识,希望对你有一定的参考价值。

参考技术A 在项目中配置第一步:首先在项目中引用log4net.dll文件。第二步:在Web.config文件中进行添加configSections的节点第三步:添加log4net配置节点然后在log4net节点下添加写入本地文本文件中的配置注释很清楚,就不解释了。写入指定邮箱的配置通过的是163邮箱服务器发送将日志写入数据库的相关配置,还要建立一张对应的数据库表另外一种写入文件的方式配置在log4net节点中还有两个节点在框架的体系里,所有的日志对象都是根日志(rootlogger)的后代。因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。在标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过标签定义日志对象使用的Appender对象。声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定标签的additivity属性为false而改变。那么上面就会有数据库日志的写入和邮箱的写入在Global.asax文件初始化配置调用运行一下Log4net中DEBUG、INFO、WARN、ERROR区分得很好。正常的DEBUG、INFO的日志,就让它记录在日志文件里面吧。对于WARN、ERROR级别的日志,记录到日志文件的同时,顺便发送电子邮件到我的信箱里面。这样一来,我也不必每天去看日志文件,二来,出了什么问题,能及时通过电子邮件得到通知。数据库结构本回答被提问者采纳

memcached预热失败

缓存逻辑:set和get方法通过中间层SocketServer,由SocketServer去操作缓存(同步备用缓存等)

预热逻辑:在SocketServer里面打日志,通过日志去预热新缓存

出现问题:部分缓存预热失败-无法从原缓存里面读取信息

排查:

1.首先看写缓存的时候,是不是写进去了,发现确实是写进去了

2.看缓存日志,确实也打印正确

3.直接连接memcached,发现无法取出日志中打印的key,估计是一些特殊符号作了某种转译

4.从memcached查找,发现里面的特殊符号确实做了转译,例如@符号转换为%40,至此原因已排查,只要在预热的时候取缓存加上转译

5.查找原因,发现是通过MemcachedClient的时候,会对key进行URL编码

private String sanitizeKey(String key) throws UnsupportedEncodingException {
  return this.sanitizeKeys?URLEncoder.encode(key, "UTF-8"):key;
}

 

以上是关于使用了log4net,发布系统后,发现无法写日志了,怎么办的主要内容,如果未能解决你的问题,请参考以下文章

log4net 发布到生产环境不写日志的解决方法

log4net记录(转)

如何以编程方式强制 log4net 释放日志文件以便可以访问它?

外部 dll 调用后 log4net 写入错误的日志文件

将Log4Net 日志保存到mongodb数据库实践

BufferingForwardingAppender in log4net