<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成人无码国产| 日韩精品电影一区亚洲| 亚洲va在线va天堂va不卡下载| 噜噜噜亚洲色成人网站| 国产一级特黄高清免费大片| 亚洲第一街区偷拍街拍| 午夜成年女人毛片免费观看| 亚洲色无码专区一区| 精品无码国产污污污免费| 亚洲av成人一区二区三区观看在线 | 亚洲国产成人精品青青草原| 天天影院成人免费观看| 亚洲免费视频播放| 最近中文字幕无吗高清免费视频| 亚洲欧美日韩一区二区三区在线| 亚洲va在线va天堂va888www| 99热在线免费观看| 男人天堂2018亚洲男人天堂| 国产精品国产午夜免费福利看 | 中文字幕视频在线免费观看| 久久精品无码一区二区三区免费| 亚洲国产中文在线二区三区免| 性感美女视频在线观看免费精品| 亚洲国产精品嫩草影院| 免费一级毛片免费播放| aa在线免费观看| 亚洲国产精品成人精品软件| 免费视频中文字幕| eeuss在线兵区免费观看| 亚洲国产精品不卡在线电影| 免费精品国产日韩热久久| 午夜亚洲国产理论片二级港台二级 | 91福利免费网站在线观看| 亚洲性无码av在线| 黄a大片av永久免费| 国产伦精品一区二区免费| 亚洲最新在线视频| 亚洲AV无码成人精品区大在线| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚洲福利一区二区| 免费中文字幕在线观看|