log4net  用代码记录日志

今天在开发项目的时候,遇到跨域调用log4net中的类,出现了一个bug,提示LogImpl未标记可序列化,此时,我靠,麻烦了,这个类又不是咱们自己的,改源码我想应该不是很实际了把,然后有以下方案:

1.改源码;

2.从子域抛异常到主域,然后在主域里记录;

3.在子域配置app.cofig;

4.在子域用代码创建log;

方案4可用,其他都不可用;

方案一:修改源码:最后出现在System类中去了,此时,我靠,这个方案肯定不行,系统类肯定没法修改了;【果断排除】

方案二:从子域抛异常到主域,然后在主域里记录,此方案还算可以,只是主域和子域都会记录日志的;【不是很好】

方案三:在子域配置app.cofig,这个肯定不行,配置了,当子域中要用到时,两个会冲突;【果断排除】

方案四:在子域用代码创建log【下面这个类】,但也折腾了好几天,老是记录不到,经过调试发现:IsDebugEnabled =fasle;

这个属性是否记录日志;

问题找到了,所以就得找解决办法,又折腾了好久,通过源码找到了问题;

本想直接修改这个IsDebugEnabled=true;可是它是只读的不允许修改;

原来老大在这里啊,你害的我找了半天;由此为了让更多人少走弯路,才总结了此博客,也为自己做备忘;

Configured这个属性决定着IsDebugEnabled;

var hierarchy = new Hierarchy { Configured = true };
            logger.Hierarchy = hierarchy;

创建日志记录;

     public class ProjectsLog
{
/// <summary>
/// 创建Log
/// </summary>
public static ILog CreateLog(string name)
{
var appender = CreateAppender(name);
var log = LogManager.GetLogger(name);
var logger = (Logger)log.Logger;
logger.RemoveAllAppenders();
logger.AddAppender(appender);
logger.Level = Level.Info;
var hierarchy = new Hierarchy { Configured = true };
logger.Hierarchy = hierarchy;
return log;
} /// <summary>
/// 创建Appender
/// </summary>
private static IAppender CreateAppender(string name)
{
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
dir = Path.Combine(baseDir , name); var appender = new RollingFileAppender
{
AppendToFile = true,
DatePattern = "yyyy-MM-dd'.log'",
File = dir + "/"
}; var layout = new PatternLayout { ConversionPattern = "-------------------------------------------------------------------------------%n[%d] %-5level - %m%n" };
layout.ActivateOptions(); appender.Layout = layout;
appender.MaxSizeRollBackups = ;
appender.RollingStyle = RollingFileAppender.RollingMode.Date;
appender.StaticLogFileName = false;
appender.Name = name;
appender.ActivateOptions();
return appender;
}
}

最新文章

  1. Scala Macros - scalamela 1.x,inline-meta annotations
  2. TensorFlow官方文档中文版
  3. MVC ajaxSubmit上传图片
  4. 使用Cydia Substrate 从Native Hook Android Java世界
  5. 在64位系统使用PLSQL Developer
  6. java_Cookies_1_商品浏览历史记录servlet1
  7. 轻松解决fedora21装完NVIDIA显卡驱动后无法进入gnome问题
  8. JVM虚拟机栈和本地方法栈溢出测试
  9. Android之Notification-android学习之旅(二)
  10. BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
  11. Java实现对象的序列化
  12. Daily Scrum - 12/15-21
  13. 20165214 2017-2018-2 《Java程序设计》课程总结
  14. 问题:使用ajax跳转到新页面无效(浏览器Safari)
  15. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十):接口服务整理
  16. golang中的接口实现(二)
  17. PAM认证机制详情
  18. ASP.NET MVC学习(四)之视图View
  19. Linux0.11从开机到准备执行main函数的启动学习
  20. C++17尝鲜:类模板中的模板参数自动推导

热门文章

  1. 【Valid Palindrome】cpp
  2. 作用域+闭包+this理解
  3. curl get started
  4. 剑指offer--面试题20
  5. Leetcode#126 Word Ladder II
  6. protobuf的安装和使用
  7. 连接ACCESS 数据库不能使用 '';文件已在使用中。
  8. .NET设计模式(12):外观模式(Fa&#231;ade Pattern)(转)
  9. Grid分组特性
  10. tcpkill清除异常tcp连接