2021年5月15日土曜日

SQLite 3 「.log」コマンドについて

概要

SQLite 3 のコマンドラインツールから詳細ログが出力された際、 「.log」コマンドで出力先を変更出来る。

ヘルプの内容


sqlite> .help .log
.log FILE|off            Turn logging on or off.  FILE can be stderr/stdout
                

基本

ログをテキストファイルに出力する。
以下は「test.log」を出力先に指定し DBに存在しない「test」テーブルからselectしようとしてエラーになる例。

環境
  • Windows 10 64bit
  • SQLite3 (3.35.5) Command-Line Shell

sqlite> .log test.log
sqlite> select * from test;
Error: no such table: test
                

test.log


(1) no such table: test in "select * from test;"
                

コマンドラインツールの方には「Error: no such table: test」しか表示されないが、 ファイルにはエラーコードとエラーになったSQL文が出力される。

ログへの出力を止めるにはoffにすればいい。


sqlite> .log off
                

stderrとstdout

ログをファイルではなくコマンドラインツール上に表示するには stderr/stdout を設定する。


sqlite> .log stdout
sqlite> select * from test;
(1) no such table: test in "select * from test;"
Error: no such table: test

sqlite> .log stderr
sqlite> select * from test;
(1) no such table: test in "select * from test;"
Error: no such table: test
                

このままだとstdout(標準出力)とstderr(標準エラー出力)の違いがわかりにくいが、 コマンドプロンプトやbashで出力先を変えるとわかりやすい。

stdoutをテキストファイルに出力

以下はコマンドプロンプトから「select1.sql」を実行し、 SQLiteコマンドラインツールの標準出力を「test.log」にリダイレクトする例。

select1.sql


.log stdout
select * from test;
                

C:\temp>sqlite3 test.db < select1.sql > test.log
Error: near line 2: no such table: test
                

test.log


(1) no such table: test in "select * from test;"
                

stderrをテキストファイルに出力

上記の内容だと.logコマンドでテキストファイルを指定するのとあまり変わらない。
次はコマンドプロンプトから「select2.sql」を実行し、 SQLiteコマンドラインツールの標準エラー出力を「test.log」にリダイレクトする例。

select2.sql


.log stderr
select * from test;                    
                

C:\temp> sqlite3 sample.db < select1.sql 2> test.log
                

test.log


(1) no such table: test in "select * from test;"
Error: near line 2: no such table: test
                

こうすると「Error: near line 2: no such table: test」が標準エラー出力だということがわかる。
エラーが発生した行数も記録されるので、デバッグ等でログが必要ならこの方法が見やすい。

使いどころ

コマンドラインツールでひとつひとつSQLを実行している分にはそれほど有用ではないが、 「.read」で SQLファイルを読み込んだり、 バッチファイルやシェルスクリプトからコマンドラインツールを呼び出す 場合に役に立つ。

selectの結果の出力先を変更したい場合は「.once」や「.output」を使う
SQLite 3 コマンドの実行結果の出力先を変更する「.once」について
SQLite 3 コマンドの実行結果の出力先を変更する「.output」について

参考URL