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

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

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

    探索與發現

    研究java技術

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      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 蜘蛛 閱讀(367) 評論(0)  編輯  收藏 所屬分類: 日常瑣事
    主站蜘蛛池模板: 久久亚洲伊人中字综合精品| 国产午夜无码视频免费网站 | 亚洲精品无码成人片久久不卡| 亚洲免费在线播放| 亚洲成在人线av| 精品成人免费自拍视频| 亚洲AV永久无码精品| 久久青草免费91观看| 亚洲视频一区调教| 亚洲成人免费在线观看| 亚洲一区中文字幕在线电影网| 67pao强力打造国产免费| 亚洲成a人片在线观看中文app | 久久精品亚洲AV久久久无码| 麻豆最新国产剧情AV原创免费| 亚洲AV成人噜噜无码网站| 午夜电影免费观看| 美女扒开尿口给男人爽免费视频| 免费一级一片一毛片| 中国内地毛片免费高清| 亚洲爱情岛论坛永久| 日韩欧毛片免费视频| 亚洲另类自拍丝袜第五页| 免费A级毛片无码A| 人妻在线日韩免费视频| 亚洲视频在线观看免费视频| 日韩免费一区二区三区在线播放| 亚洲av无码专区亚洲av不卡| 国产亚洲精品无码拍拍拍色欲| 久久精品私人影院免费看| 国产成人精品亚洲2020| 国产一级理论免费版| 久青草视频在线观看免费| 亚洲精品人成电影网| 在线免费观看韩国a视频| 香蕉免费在线视频| 国产亚洲sss在线播放| 亚洲乱码中文字幕手机在线| 最近最好最新2019中文字幕免费| 亚洲AV无码一区二区三区电影| 亚洲精品无码鲁网中文电影|