<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在线播放| 在线亚洲97se亚洲综合在线| 一级午夜免费视频| 中文字幕专区在线亚洲| 最近的2019免费中文字幕| 亚洲欧洲自拍拍偷午夜色无码| 免费国产va视频永久在线观看| 亚洲国产主播精品极品网红| 成年大片免费视频播放一级 | 无码国产精品一区二区免费虚拟VR| 亚洲日韩精品无码专区| 免费可以看黄的视频s色| 最新亚洲精品国偷自产在线| 在线免费观看视频你懂的| 亚洲精品久久久久无码AV片软件| 国产一精品一aⅴ一免费| 亚洲精品视频免费| 亚洲综合精品一二三区在线 | 亚洲三级在线观看| 国产精品免费看香蕉| 二个人看的www免费视频| 亚洲欧洲第一a在线观看| 可以免费看的卡一卡二| 亚洲av无码片vr一区二区三区| 亚洲 自拍 另类小说综合图区| 成人免费一区二区三区| 亚洲精品不卡视频| 国产又长又粗又爽免费视频| 国产日韩在线视频免费播放| 亚洲综合综合在线| 国产精品二区三区免费播放心| 一区二区免费电影| 亚洲人6666成人观看| 无码国产精品一区二区免费16| 亚洲综合校园春色| 亚洲午夜av影院| 91成人免费观看网站| 特级毛片在线大全免费播放|