◆ info などを実行すると 内部的に basicConfig が実行されてる
◆ 2 回目の basicConfig は何もしない
◆ 3.8 以降は force オプションつければ 2 回目以降でも再設定可能
◆ 3.8 未満は logging.root のメソッドを使う (logging.root.setLevel など)

Python にはログ用のモジュールが標準であるので print よりちゃんと logging を使おうと思って使ってみたときのことです

import logging
logging.info("test")
(出力なし)

出ないじゃん

一応 warn と error もやってみると

import logging
logging.info("test")
logging.warn("test")
logging.error("test")
WARNING:root:test
ERROR:root:test

出てます
デフォルトでは info は出してくれないみたいですね

info も出力してほしいので表示するログレベルの設定をしようと探してみると basicConfig を使うようです
こうすれば 2 つ目の info は出力されるはず

import logging
logging.info("This is not shown")
logging.basicConfig(level=logging.INFO)
logging.info("This is shown")
(出力なし)

出ないじゃん
いろいろ試してると logging.info を実行する前に logging.basicConfig を行うと出力されました

import logging
logging.basicConfig(level=logging.INFO)
logging.info("This is shown")
INFO:root:This is shown

logging.info や logging.warn で使われるロガーは logging.root ですが basicConfig を行っても設定自体が変わっていないようです
info を実行しない場合は

import logging
print(logging.root)
logging.basicConfig(level=logging.INFO)
print(logging.root)
<RootLogger root (WARNING)>
<RootLogger root (INFO)>

となり設定が変わっています
しかし info を実行した場合は

import logging
print(logging.root)
logging.info("a")
logging.basicConfig(level=logging.INFO)
print(logging.root)
<RootLogger root (WARNING)>
<RootLogger root (WARNING)>

変わっていません

なんでこんなことに?と思ってソースを見てみました
basicConfig は root.handlers が空のときにのみ設定を行ってるようです
その設定時に root.handlers が追加されるので 2 度目以降の basicConfig は効果なしです
また info や warn などのログ出力メソッドでは root.handlers が空だと最初に basicConfig を行って handlers を追加してから処理を行ってます
なので info などを行った後の basicConfig は意味がなかったわけです

basicConfig の処理を見ると force オプションがあって これがあると最初に handlers を削除しています
これなら大丈夫そうとやってみたのですが

import logging
logging.info("This is not shown")
logging.basicConfig(level=logging.INFO, force=True)
logging.info("This is shown")
(出力なし)

出力されません……
ここでかなり苦戦したのですが 理由は単純でこのオプションが 3.8 から実装されたものでした
よく見るとドキュメントの下の方にも書いています

これのために 標準ライブラリ含むステップ実行までやって「あれ force の処理がない」とか思ったほどです
機能的にそんな最近変更されたものと思わず初期の頃からあるものだと思ってました
まぁ グローバルのロガーの設定は最初にすべきで途中で変えるものじゃないですからね
最初に気づいたのも REPL でやってたときで 普通にファイル実行だったら気づかなかったと思います

もし 3.8 未満のバージョンで変更したい場合 basicConfig を使わず 直接 root ロガーの setLevel メソッドを使えば変更可能です

import logging
logging.info("This is not shown")
logging.root.setLevel(logging.INFO)
logging.info("This is shown")
INFO:root:This is shown