0

ログを Sql Server データベースに保存するために、AdoNetAppender で log4net をアクティブにしました。

実行後、すべてのパラメーター (DateTime を除く) にメッセージ値が入力されていることがわかります。

私はアダプターを自分でコード (xml 構成なし) で作成するので、パターン マッピングを機能させるために呼び出すのを忘れたメソッドが 1 つあると思いますか?

    var root = ((Hierarchy)LogManager.GetRepository()).Root;

    root.AddAppender(this.CreateDBAppender());
    root.Repository.Configured = true;

    this.log = LogManager.GetLogger("MyLogger");



private IAppender CreateDBAppender()
{
    ...
    RawLayoutConverter layoutConverter = new RawLayoutConverter();

    var databaseAppender = new AdoNetAppender
    {
        Name = "MyLogger",
        ConnectionString = "...",
        CommandText = @"INSERT INTO [Log] ([DateTime], [Exception], [Host], [Level], [Logger], [Message], [Severity], [Thread]) 
                                        VALUES (@logdate, @exception, @host, @level, @logger, @message, @severity, @thread)",
        CommandType = System.Data.CommandType.Text,
        ConnectionType = "System.Data.SqlClient.SqlConnection"
    };

    databaseAppender.AddParameter(new AdoNetAppenderParameter
        {
            ParameterName = "@logdate",
            DbType = System.Data.DbType.DateTime,
            Layout = new RawTimeStampLayout()
        });

    databaseAppender.AddParameter(new AdoNetAppenderParameter
    {
        ParameterName = "@message",
        DbType = System.Data.DbType.String,
        Size = 4000,
        Layout = (IRawLayout)layoutConverter.ConvertFrom(new PatternLayout
        {
            ConversionPattern = "%m"
        })
    });

    databaseAppender.AddParameter(new AdoNetAppenderParameter
        {
            ParameterName = "@host",
            DbType = System.Data.DbType.String,
            Size = 50,
            Layout = (IRawLayout)layoutConverter.ConvertFrom(new PatternLayout
                {
                    ConversionPattern = "%property{host}"
                })
        });

    databaseAppender.AddParameter(new AdoNetAppenderParameter
        {
            ParameterName = "@level",
            DbType = System.Data.DbType.String,
            Size = 50,
            Layout = (IRawLayout)layoutConverter.ConvertFrom(new PatternLayout
                {
                    ConversionPattern = "%level"
                })
        });

    //// more parameters ...

    databaseAppender.ActivateOptions();
    return databaseAppender;
}
4

1 に答える 1

0

何が問題なのかわかりました。常にメッセージが表示される理由は、PatternLayout クラスで構成されているデフォルトの ConversionPattern を使用していたためです。

public const string DefaultConversionPattern = "%message%newline";

コードで ConversionPattern プロパティを設定しても影響がないようです。PatternLayout クラスのコンストラクターを介してパターンを提供する必要があります。

    databaseAppender.AddParameter(new AdoNetAppenderParameter
        {
            ParameterName = "@level",
            DbType = System.Data.DbType.String,
            Size = 50,
            Layout = (IRawLayout)layoutConverter.ConvertFrom(new PatternLayout("%-5p"))
        });
于 2013-04-26T15:04:34.950 に答える