<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 蜘蛛 閱讀(370) 評論(0)  編輯  收藏 所屬分類: 日常瑣事
    主站蜘蛛池模板: 国产精品视频免费| 亚洲线精品一区二区三区影音先锋| 亚洲av无码专区在线观看下载 | 免费精品人在线二线三线区别| 亚洲欧美日韩中文字幕一区二区三区| 亚洲 另类 无码 在线| 久久精品免费观看| 亚洲国产精品ⅴa在线观看| 亚洲中文字幕无码久久2017| 免费观看AV片在线播放| 国产va免费精品| 亚洲精品福利你懂| 久久综合亚洲色HEZYO国产| 18禁免费无码无遮挡不卡网站| 五月天国产成人AV免费观看| 亚洲国产美女在线观看 | 一本色道久久综合亚洲精品| 久久久久久久91精品免费观看| 产传媒61国产免费| 亚洲国产成人资源在线软件| 4338×亚洲全国最大色成网站| 国内精品乱码卡1卡2卡3免费| 毛片基地看看成人免费| 亚洲乱色熟女一区二区三区蜜臀| 亚洲国产成人高清在线观看 | 亚洲卡一卡2卡三卡4卡无卡三| 国产在线19禁免费观看国产 | 精品熟女少妇AV免费观看| a级毛片无码免费真人久久| 亚洲精品无码专区在线| 亚洲制服中文字幕第一区| 亚洲国产综合精品一区在线播放| 日本阿v免费费视频完整版| 日本黄色动图免费在线观看| 黄床大片30分钟免费看| 亚洲色在线无码国产精品不卡 | 日韩毛片免费一二三| 亚洲妇女无套内射精| 亚洲国产成人精品久久 | 国产成人无码精品久久久久免费 | 亚洲成av人片不卡无码|