log 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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构