概要
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
-
Command Line Shell For SQLite
公式のコマンドラインツールに関するドキュメント
https://www.sqlite.org/cli.html