zoukankan      html  css  js  c++  java
  • 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     }
    View Code
  • 相关阅读:
    【ASP.NET】website转webapplication
    【.net】ASP.Net设置和取消设置web项目起始页
    【.net】“Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。
    snmp简单使用
    saltstack系列2之zabbix-agent自动化部署
    saltstack系列1之salt-api配置与使用
    python06 深浅拷贝原理
    python05
    level 1 -- unit 4 -- where 引导的疑问句
    level1 -- unit 3
  • 原文地址:https://www.cnblogs.com/zlp520/p/4104129.html
Copyright © 2011-2022 走看看