log4net 用代码记录日志

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;

 

         创建日志记录;

 

 1     public class ProjectsLog

 2     {

 3         /// <summary>

 4         /// 创建Log

 5         /// </summary>

 6         public static ILog CreateLog(string name)

 7         {

 8             var appender = CreateAppender(name);

 9             var log = LogManager.GetLogger(name);

10             var logger = (Logger)log.Logger;

11             logger.RemoveAllAppenders();

12             logger.AddAppender(appender);

13             logger.Level = Level.Info;

14             var hierarchy = new Hierarchy { Configured = true };

15             logger.Hierarchy = hierarchy;

16             return log;

17         }

18 

19         /// <summary>

20         /// 创建Appender

21         /// </summary>

22         private static IAppender CreateAppender(string name)

23         {

24             var baseDir = AppDomain.CurrentDomain.BaseDirectory;

25             dir = Path.Combine(baseDir , name);

26 

27             var appender = new RollingFileAppender

28                                {

29                                    AppendToFile = true,

30                                    DatePattern = "yyyy-MM-dd'.log'",

31                                    File = dir + "/"

32                                };

33 

34             var layout = new PatternLayout { ConversionPattern = "-------------------------------------------------------------------------------%n[%d] %-5level - %m%n" };

35             layout.ActivateOptions();

36 

37             appender.Layout = layout;

38             appender.MaxSizeRollBackups = 30;

39             appender.RollingStyle = RollingFileAppender.RollingMode.Date;

40             appender.StaticLogFileName = false;

41             appender.Name = name;

42             appender.ActivateOptions();

43             return appender;

44         }

45     }
View Code

 

你可能感兴趣的:(log)