首页 新闻 会员 周边

asp.net mvc里用log4net无法产生日志

0
悬赏园豆:5 [已解决问题] 解决于 2013-12-24 09:17

我在asp.net mvc里用quartz.Net运行一些任务,在执行的任务代码里用log4net记录日志,但却无法产生日志。但同样的记录日志的代码在action里却可以产生日志。 调试了一下,发现在任务代码里 log对象是一个Common.Logging.Simple.NoOpLogger类型的对象(如下图)。所以无法产生日志,但不知为何得到的是Common.Logging.Simple.NoOpLogger类型的对象

何塞穆里尼奥的主页 何塞穆里尼奥 | 初学一级 | 园豆:126
提问于:2013-12-23 14:44
< >
分享
最佳答案
1

 ILog 用的是Common.Logging的ILog  改成log4net的ILog就可以了

何塞穆里尼奥 | 初学一级 |园豆:126 | 2013-12-24 09:16

反骨仔 | 园豆:444 (菜鸟二级) | 2017-04-19 22:28
其他回答(1)
0

没用过log4net,看语句 LogManager.GetLogger("System") 的含义应该是获取一个命名 Logger 对象。这可能是通过代码创建添加进去的,也可能是在配置文件中配置的。所以,你应该检查你的代码中是否有先添加,或者检查你的配置文件中是否有配置名称为 System 的 Logger。

收获园豆:5
Launcher | 园豆:45045 (高人七级) | 2013-12-23 16:39

谢谢,你的回答,log4net里,如上,System不一定是要事先添加的,它可以现创建这么个对象

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 16:42

@何塞穆里尼奥: 你是说不需要这么配置:http://www.cnblogs.com/chencidi/archive/2010/01/12/1645291.html

或者通过代码实现同上述配置文件相同的功能,只要调用 LogManager.GetLogger("System"),它就会创建一个命名的 Logger 实例,对吗?如果是的话,请你看下 LogManager.GetLogger 的源码,它里面会告诉你,它在什么条件下会返回 NoOpLogger 对象。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 16:46

@Launcher: 恩,好的,我也尝试看过,但没看出个所以然来

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 16:50

@何塞穆里尼奥: 不是有源代码吗?启用下调是,一步一步就跟进去了。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 16:57

@Launcher: Ok 好的

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 16:59

@何塞穆里尼奥: 你是用了 Ibatis.net 吧!

http://www.cnblogs.com/xiaogangqq123/archive/2011/07/01/2095431.html

我从 Apache 下载了 log4net.dll ,随便写一句:ILog log = LogManager.GetLogger("System") ,运行返回给我 “log4net.Core.LogImpl” 对象。然后翻遍了 log4net.dll 也没找到你说的 “Common.Logging.Simple.NoOpLogger” 对象,甚至连“Common” 命名空间都没有,就算是用运行时代码编译,那也没必要把命名空间从 log4net 修改到 Common 这种毫无联系的空间中去吧!所以我一搜,才发现,原来你这是 Ibatis.net 的。所以,你问错问题了。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 17:07

@Launcher: 貌似是Common.Logging这个程序集的 它跟Log4Net什么关系我也没看  当初没想到log4net会出这奇怪的问题

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 17:11

@Launcher: log4net.Core.LogImpl这个对象,我在action里是得到的这个对象 但不知为何在任务代码里得到的是Common.Logging.Simple.NoOpLogger

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 17:12

@何塞穆里尼奥: 已经跟你说过了,这跟 log4net 没关系,是你的 IBatis.Net 的问题,http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html,这跟前面的文章都一样,log4net 从 http://logging.apache.org/log4net/ 下载。IBatis.Net 我不用,我用 EF。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 17:15

@Launcher: 你啥QQ号?

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 17:16

@何塞穆里尼奥: XXXXXXXX,你要问 IBatis.Net 的问题就别加了,我只用 EF。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 17:17

@Launcher: ILog 用的是Common.Logging的ILog  改成log4net的ILog就可以了

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 17:34

@何塞穆里尼奥: 请问,我引用了 log4net.dll 后,按照你说的不用做什么配置(通过代码配置或者配置文件,因为我使用 log4c 和 log4cpp 时,确实需要先配置),然后写入如下语句:

ILog log = LogManager.GetLogger("System");
log.Error("asp.net mvc里用log4net无法产生日志.");

我的日志写到哪儿去了?我咋什么都没找到呢?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 17:48

@Launcher: 我没说不需要配置啊,你查查log4net的用法吧,配置还是挺繁琐的

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-23 17:50

@何塞穆里尼奥: 我就说嘛,log4c、log4cpp 都要配置(代码或者配置文件),log4net 怎么就不需要了。你这一句话不说清楚,害得我绕了一个大圈,然后又没说使用的 IBatis.Net ,害得我又绕了一大圈。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-12-23 17:57

@Launcher: so sorry

支持(0) 反对(0) 何塞穆里尼奥 | 园豆:126 (初学一级) | 2013-12-24 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册