在程序中配置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框架被配置好以后,就可以如前所述使用日志功能了。
楼上的对, 配置系统并非只有一个 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); 其他使用的地方照旧不变
那个 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);
其他使用的地方照旧不变