投稿

6月, 2021の投稿を表示しています

ODBCのAddWithValue

Timestampで検索条件に使った、自動テストがエラーになるので、原因を調べてたらOdbcParameterCollection.AddWithValueが、引数の型によらず、すべて文字列として扱ってることが分かった。 using System ; namespace AddWithValue {      class Program     {          static void Main ( string []  args )         {              Console . WriteLine ( "ODBC" );              using ( var cmd  =  new System . Data . Odbc . OdbcCommand ())             {                  String str  =  "str" ;                  cmd . Parameters . AddWithValue ( "String" ,  str );      ...

Tomcat10 + log4j2

log4j はlog4j2になって、設定が自動読み込みされるようになった。 Tomcat等Webアプリの場合の設定ファイルの置き場は マニュアル によると、 サーブレットコンテクストに場所が指定されていれば、その場所を探す。 場所が指定されていなければ、WEB-INFディレクト内のlog4j2で始まるファイル名のファイルを探す。 classpathとか、(Webアプリではない場合と同じ)通常の設定ファイル検索を行う。 となっている。 そこでTomcat10でWEB-INFにlog4j2.xmlを置いたのだが、無視されてしまう。 src直下にlog4j2.xmlを置くと、自動で読み込んでくれた。 なぜ、WEB-INF配下のを読まないのか、log4jのデバッグ出力を有効にしたりして、ソースを追いかけたところ、org.apache.logging.log4j.util.Constantsのコメントにこんな記述を発見。 if we think we are running in a web container, based on the boolean value of system property "log4j2.is.webapp", or (if this system property is not set) whether the javax.servlet.Servlet class is present in the classpath. Tomcat10ではサーブレットがjavax.servlet.*からjakarta.servlet.*に変わってしまったので、log4j2はWebアプリと判別できなくなってしまったようだ。