首页 > 代码库 > log4net 用代码记录日志
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 /// 创建Appender21 /// </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 RollingFileAppender28 {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 }
log4net 用代码记录日志