3

クラス1にlog4jの2つのインスタンスを作成してファイルに書き込み、別のインスタンスをjdbcadapterに作成できますか?

// one to write log in console
Logger log = Logger.getLogger(this.getClass()); 

// write in database within one class 
Logger log1 = Logger.getLogger(this.getClass()); 

My jdbc adapter is My file adapter is I wan to Logger instance log for File md Logger instant log1 for jdbc.

4

3 に答える 3

3

には、 などのわかりやすい名前が付いたlog4jさまざまなものがあります。複数の Appender を任意の Logger にアタッチできるため、同じ情報を複数の出力に記録できます。たとえば、ローカルのファイルや、別のコンピューターのソケット リスナーなどです。AppendersFileAppender, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender and even SMTPAppender

さらに、レベルに応じて異なる出力にログを書き込みたい場合は、Log to appender by level を試すことができます。

于 2012-04-10T07:24:49.847 に答える
1

これは、2 番目のロガーに別の名前を付けた場合にのみ機能します。それ以外の場合、両方の変数に同じインスタンスが含まれます。例えば:

Logger log = Logger.getLogger(this.getClass());
Logger log1 = Logger.getLogger(this.getClass().getName() + ".db");

次に、2 つの別個のロガーを取得しました。

于 2012-04-10T07:21:50.453 に答える
1

それがインスタンスを作成するかどうか(または同じキャッシュされたものを返すかどうか)はわかりませんが、作成したとしても同じアペンダー構成になります(カテゴリに同じクラス名が使用されるため)。

カテゴリ名が異なる 2 つの異なるロガーを取得できます。

Logger log = Logger.getLogger(this.getClass()); 

Logger log1 = Logger.getLogger(this.getClass().getName()+".extra");

ログを記録する場所は、log4j.properties で構成されます。

また、優先度などのフィルターに応じて、複数のアペンダーに同じロガー ログを記録することもできます。したがって、何をどこに記録するかについてコードに複雑なロジックがない限り、1 つのロガーを使用するだけで、ファイルとデータベースの両方にアクセスできます。

于 2012-04-10T07:24:22.063 に答える