log4net 写日志的奇怪问题

ayun00 2017-02-21 10:29:17
以前用debug版本编译, 日志都能正常写出来, 所有没有注意到
今天用release版本编译了一次, 却发现日志输出不了了 , 项目的config文件都一样
请问怎么解决?
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayun00 2017-03-01
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
你可以使用 .net framework 自身支持的 windows 日志机制。 具体来说,你可以在一个扩展类库中定义
public static void WriteEventLog(this Type source, object message, EventLogEntryType logType)
{
    var jsn = JObject.FromObject(message).ToString();
    ThreadPool.QueueUserWorkItem(h =>
    {
        lock (_log)
        {
            if (_log.Source != source.FullName)
                _log.Source = source.FullName;
            _log.WriteEntry(jsn, logType);
        }
    });
}
然后就可以轻量级地去记录日志了。它成熟、稳定。 例如程序中我可以写
#if DEBUG
            typeof(Federal.FederalWorker).WriteEventLog(new
            {
                _t = "收到 FederalMaster 发来消息",
                method = "Worker_MessageReceived",
                message = client.Message
            }, EventLogEntryType.Information);
#endif
你可以打开windows 的“事件查看器”查看 “windows日志-->应用程序”下面你自己写的日志,可以过滤、导出、清理或者增加日志文件。有 windows 系统做品质保证。
你这个方法不错 , 同时我还是想搞清楚 为什么 log4net 不能输出的原因, 网上搜了下, 好像没人说过有这个问题
ayun00 2017-03-01
  • 打赏
  • 举报
回复
引用 4 楼 txtName 的回复:
如果是单独的log4net.config文件的话就检查一下看看realease根目录下有没有log4net.config这个文件
不是单独的文件, 不是缺少文件的问题
引用 5 楼 xian_wwq 的回复:
debug和release的最大区别是生成目录不同 建议lz可以从debug和release两个文件夹中的文件比对入手 一般来说如果debug是正常的,说明代码流程没有大的问题 出问题一般在配置 ----------------------------- 还有,release一样可以下断点调试的
不是说不能断点调试, 只是log4net 无法输出日志. 文件对比过了debug和release 生成的 PDB 是不同的
txtName 2017-02-22
  • 打赏
  • 举报
回复
如果是单独的log4net.config文件的话就检查一下看看realease根目录下有没有log4net.config这个文件
  • 打赏
  • 举报
回复
你可以使用 .net framework 自身支持的 windows 日志机制。 具体来说,你可以在一个扩展类库中定义
public static void WriteEventLog(this Type source, object message, EventLogEntryType logType)
{
    var jsn = JObject.FromObject(message).ToString();
    ThreadPool.QueueUserWorkItem(h =>
    {
        lock (_log)
        {
            if (_log.Source != source.FullName)
                _log.Source = source.FullName;
            _log.WriteEntry(jsn, logType);
        }
    });
}
然后就可以轻量级地去记录日志了。它成熟、稳定。 例如程序中我可以写
#if DEBUG
            typeof(Federal.FederalWorker).WriteEventLog(new
            {
                _t = "收到 FederalMaster 发来消息",
                method = "Worker_MessageReceived",
                message = client.Message
            }, EventLogEntryType.Information);
#endif
你可以打开windows 的“事件查看器”查看 “windows日志-->应用程序”下面你自己写的日志,可以过滤、导出、清理或者增加日志文件。有 windows 系统做品质保证。
xian_wwq 2017-02-22
  • 打赏
  • 举报
回复
debug和release的最大区别是生成目录不同 建议lz可以从debug和release两个文件夹中的文件比对入手 一般来说如果debug是正常的,说明代码流程没有大的问题 出问题一般在配置 ----------------------------- 还有,release一样可以下断点调试的
ayun00 2017-02-21
  • 打赏
  • 举报
回复
引用 2 楼 ayun00 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 看看5,7楼回答。 http://bbs.csdn.net/topics/350227481
4楼的方法在DEBUG版本可行,RELEASE版本不行. 5楼的方法可行,但不是拷贝PDB文件,而是在生成RELEASE版本时加入生成调试信息. 具体方式:项目右键-属性-配置属性-生成-生成调试信息改为True即可. vs2015没有找到这个选项 5楼说 copy PDB 文件 我用release编译时候生成了 pdb文件 也拷贝了啊 [/quote] 另外 我不是打印不出出错行数, 是所有的信息都打印不出, 调用log4net方法后, 没有任何内容输出
ayun00 2017-02-21
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
看看5,7楼回答。 http://bbs.csdn.net/topics/350227481
4楼的方法在DEBUG版本可行,RELEASE版本不行. 5楼的方法可行,但不是拷贝PDB文件,而是在生成RELEASE版本时加入生成调试信息. 具体方式:项目右键-属性-配置属性-生成-生成调试信息改为True即可. vs2015没有找到这个选项 5楼说 copy PDB 文件 我用release编译时候生成了 pdb文件 也拷贝了啊
正怒月神 2017-02-21
  • 打赏
  • 举报
回复
看看5,7楼回答。 http://bbs.csdn.net/topics/350227481

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧