2

プログラムで (ファイル パスは実行時に生成されるため)、SQL ステートメント用に別のログ ファイルを作成したいと考えています。私のコードは次のようになります

  public static void InitializeLogger(FileInfo logFile, FileInfo sqlLogFile, 
             Level threshhold, string layout = PATTERN_LAYOUT, bool rolling = true)
    {
        var hierarchy = (Hierarchy)LogManager.GetRepository();
        var appender = CreateAppender(true, layout, APPENDER_NAME, logFile, threshhold);
        hierarchy.Root.AddAppender(appender);

        var sqlAppender = CreateAppender(rolling, layout, SQL_APPENDER_NAME, sqlLogFile, Level.Info);

        var sqlLogger = (Logger)LogManager.GetLogger(SQL_LOGGER_NAME).Logger;
        sqlLogger.RemoveAllAppenders();
        sqlLogger.AddAppender(sqlAppender);
        sqlLogger.Level = Level.Info;
    }

    private static FileAppender CreateAppender(bool rolling, string layout, string appenderName, FileInfo fileInfo, Level threshhold)
    {
        FileAppender result;
        if (rolling)
        {
            result = new RollingFileAppender
                     {
                         AppendToFile = true,
                         ImmediateFlush = true,
                         Name = appenderName,
                         Layout = new PatternLayout(layout),
                         Threshold = threshhold,
                         File = fileInfo.FullName,
                         RollingStyle = RollingFileAppender.RollingMode.Date,
                         StaticLogFileName = true
                     };
        }
        else
        {
            result = new FileAppender
                     {
                         AppendToFile = true,
                         ImmediateFlush = true,
                         Name = appenderName,
                         Layout = new PatternLayout(layout),
                         Threshold = threshhold,
                         File = fileInfo.FullName
                     };
        }
        result.ActivateOptions();
        return result;
    }

    public static void LogSQL(this ILog logger, string sql)
    {
        var sqlLogger = LogManager.GetLogger(SQL_LOGGER_NAME);
        sqlLogger.InfoFormat("Sql: {0}", sql);
    }

問題は、LogSQL が両方のログ ファイルに記録されているように見えることです。助言がありますか?

4

2 に答える 2

1

加法性をfalseに設定してみてください。

http://logging.apache.org/log4net/release/sdk/log4net.Repository.Hierarchy.Logger.Additivity.html

于 2012-08-21T01:16:46.540 に答える