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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。