<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    探索與發(fā)現(xiàn)

    研究java技術(shù)

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      83 隨筆 :: 0 文章 :: 109 評論 :: 0 Trackbacks

    I have used log4net in numerous projects over the years.

    Recently I have been working in MOSS 2007, creating timer jobs, and I certainly saw the value in having a great logging tool like log4net at my disposal.

    The timer job will be executed by Windows SharePoint Services Timer service. The service by default runs under the Network Service account.

    You will need to put log4net into the GAC. The default log4net distribution comes with a signed assembly for this purpose.

    Given that your assembly of the Timer job will live inside the GAC as well, I found that the easiest route was to configure log4net in code.  That way we don't have to worry about an extra configuration file.

    My preferred logging target in log4net is a database, so the example will log to a dedicated database.

    The following function can be used to programmatically configure log4net with one database appender, and selective filtering

    public void ConfigureLog4Net(string _LOGGING_CONNECTIONSTRING,bool DEBUGINFO)
    {
    AdoNetAppender sqlAppender = new AdoNetAppender();
    sqlAppender.CommandType = CommandType.Text;
    sqlAppender.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
    sqlAppender.ConnectionString = _LOGGING_CONNECTIONSTRING;
    sqlAppender.CommandText = "INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message,@exception)";

    AdoNetAppenderParameter param1 = new AdoNetAppenderParameter();
    param1.ParameterName = "@log_date";
    param1.Layout = new log4net.Layout.RawTimeStampLayout();
    param1.DbType = DbType.DateTime;
    sqlAppender.AddParameter(param1);

    AdoNetAppenderParameter param2 = new AdoNetAppenderParameter();
    param2.ParameterName = "@log_level";
    param2.Layout = new Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout("%level"));
    param2.DbType = DbType.String;
    param2.Size = 50;
    sqlAppender.AddParameter(param2);
    AdoNetAppenderParameter param3 = new AdoNetAppenderParameter();
    param3.ParameterName = "@thread";
    param3.Layout = new Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout("%thread"));
    param3.DbType = DbType.String;
    param3.Size = 255;
    sqlAppender.AddParameter(param3);

     

    AdoNetAppenderParameter param4 = new AdoNetAppenderParameter();
    param4.ParameterName = "@logger";
    param4.Layout = new Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout("%logger"));
    param4.DbType = DbType.String;
    param4.Size = 255;
    sqlAppender.AddParameter(param4);

    AdoNetAppenderParameter param5 = new AdoNetAppenderParameter();
    param5.ParameterName = "@message";
    param5.DbType = DbType.String;
    param5.Layout = new Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout("%message"));
    param5.Size = 4000;
    sqlAppender.AddParameter(param5);

    AdoNetAppenderParameter param6 = new AdoNetAppenderParameter();
    param6.ParameterName = "@exception";
    param6.DbType = DbType.String;
    param6.Layout = new Layout2RawLayoutAdapter(new log4net.Layout.ExceptionLayout());
    param6.Size = 4000;
    sqlAppender.AddParameter(param6);

    log4net.Filter.LevelRangeFilter filter = new log4net.Filter.LevelRangeFilter();

    if (!DEBUGINFO)
    {
    filter.LevelMin = log4net.Core.Level.Warn;
    filter.LevelMax = log4net.Core.Level.Critical;
    sqlAppender.AddFilter(filter);
    }

    sqlAppender.BufferSize = 1;
    sqlAppender.ActivateOptions();

    BasicConfigurator.Configure(sqlAppender);
    }

     

    The schema for the database the code uses is:

    CREATE TABLE [dbo].[Log](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [Date] [datetime] NOT NULL,
     [Thread] [varchar](255) NOT NULL,
     [Level] [varchar](50) NOT NULL,
     [Logger] [varchar](255) NOT NULL,
     [Message] [varchar](4000) NOT NULL,
     [Exception] [varchar](2000) NULL
    ) ON [PRIMARY]

    posted on 2009-02-11 07:10 蜘蛛 閱讀(370) 評論(0)  編輯  收藏 所屬分類: 日?,嵤?/a>
    主站蜘蛛池模板: 久久精品免费观看国产| 国产一级a毛一级a看免费视频| 精品国产污污免费网站入口| 日韩免费高清大片在线| 天堂在线免费观看中文版| 亚洲伊人久久精品影院| 亚洲1234区乱码| 国产无遮挡色视频免费观看性色| 69视频在线观看高清免费| 国产又粗又猛又爽又黄的免费视频 | 亚洲国产综合精品| 人成电影网在线观看免费| 在线观看免费中文视频| 国产国拍亚洲精品福利| 亚洲色欲色欲www| 特级做A爰片毛片免费看无码 | 亚洲精品无码av天堂| 亚洲天堂一区二区三区| 成人免费ā片在线观看| 妞干网免费视频观看| 亚洲精品国产成人99久久| 无遮挡国产高潮视频免费观看| 91成年人免费视频| 亚洲国产一区在线| 成人毛片100免费观看| 在线看片无码永久免费aⅴ| 亚洲精品美女网站| 一区二区三区四区免费视频| 亚洲情XO亚洲色XO无码| 好吊色永久免费视频大全 | 亚洲精品99久久久久中文字幕 | 亚洲欧洲∨国产一区二区三区| 免费无毒a网站在线观看| 国产一区二区三区免费看| 中文字幕在线日亚洲9| 成人免费在线视频| 亚洲AV香蕉一区区二区三区| 在线免费观看一级片| 亚洲高清乱码午夜电影网| 夫妻免费无码V看片| 久久人午夜亚洲精品无码区|