想问问,log4net能否不使用配置文件,而是通过程序进行配置呢?

解决方案 »

  1.   

    不行,log4net就是需要配置,你为何不想配置?写死在程序里?
      

  2.   

    我一直在用,且每次都写Config,这个文件是必须的!这个文件也是很容易配置的。
      

  3.   

    在程序中配置log4net // 和PatternLayout一起使用FileAppender log4net.Config.BasicConfigurator.Configure(   new log4net.Appender.FileAppender(      new log4net.Layout.PatternLayout("%d        [%t]%-5p %c [%x] - %m%n"),"testfile.log"));   // using a FileAppender with an XMLLayout log4net.Config.BasicConfigurator.Configure(   new log4net.Appender.FileAppender(     new log4net.Layout.XMLLayout(),"testfile.xml"));   // using a ConsoleAppender with a PatternLayout log4net.Config.BasicConfigurator.Configure(   new log4net.Appender.ConsoleAppender(     new log4net.Layout.PatternLayout("%d       [%t] %-5p %c - %m%n")));   // using a ConsoleAppender with a SimpleLayout log4net.Config.BasicConfigurator.Configure(   new log4net.Appender.ConsoleAppender(new     log4net.Layout.SimpleLayout())); 尽管这里用代码配置log4net也很方便,但是你却不能分别配置每个日志对象。所有的这些配置都是被应用到根日志上的。 log4net.Config.BasicConfigurator 类使用静态方法Configure 设置一个Appender 对象。而Appender的构造函数又会相应的要求Layout对象。你也可以不带参数直接调用BasicConfigurator.Configure(),它会使用一个缺省的PatternLayout对象,在一个ConsoleAppender中输出信息。如下所示:   log4net.Config.BasicConfigurator.Configure(); 在输出时会显示如下格式的信息:   0 [1688] DEBUG log1 A B C - Test 20 [1688] INFO log1 A B C - Test 当log4net框架被配置好以后,就可以如前所述使用日志功能了。   
      

  4.   

    楼上的对, 配置系统并非只有一个 xml configurtor 这条路, 
    那个 basicConfigurator 就是运行时配置用的:下面是本官派生了一个 AdoNetAppender 后, 手工配置的过程:
        public static bool InitializeLogSystem()
        {
          NpgsqlAppender appender = new NpgsqlAppender();
          appender.Name = "npgsqlappender";      appender.CommandText = "log4net";
          appender.CommandType = System.Data.CommandType.StoredProcedure;
          appender.ConnectionString = connectionstring;      PatternLayout patternLayout;
          NpgsqlAppenderParameter parameter = new NpgsqlAppenderParameter();
          parameter.ParameterIndex = 0;
          parameter.DbType = System.Data.DbType.Date;
          parameter.ParameterName = "p_log_date";
          parameter.Size = 255;
          patternLayout = new PatternLayout("%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}");
          parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);      appender.AddParameter(parameter);
          parameter = new NpgsqlAppenderParameter();
          parameter.ParameterIndex = 1;
          parameter.DbType = System.Data.DbType.String;
          parameter.ParameterName = "p_thread";
          parameter.Size = 50;
          patternLayout = new PatternLayout("%thread");
          parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);
          appender.AddParameter(parameter);      parameter = new NpgsqlAppenderParameter();
          parameter.ParameterIndex = 2;
          parameter.DbType = System.Data.DbType.String;
          parameter.Size = 50;
          parameter.ParameterName = "p_log_level";
          patternLayout = new PatternLayout("%level");
          parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);
          appender.AddParameter(parameter);      parameter = new NpgsqlAppenderParameter();
          parameter.ParameterIndex = 3;
          parameter.DbType = System.Data.DbType.String;
          parameter.ParameterName = "p_logger";
          parameter.Size = 255;
          patternLayout = new PatternLayout("%logger");
          parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);
          appender.AddParameter(parameter);      parameter = new NpgsqlAppenderParameter();
          parameter.ParameterIndex = 4;
          parameter.DbType = System.Data.DbType.String;
          parameter.ParameterName = "p_message";
          parameter.Size = 4000;
          patternLayout = new PatternLayout("%message");
          parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);
          appender.AddParameter(parameter);      appender.ActivateOptions();      BasicConfigurator.Configure(appender);
    其他使用的地方照旧不变
      

  5.   

    谢谢大家。我就是想做一个独立运行的桌面程序exe或封装为COM对象。带着一个配置文件挺累赘。