[C#] ログの出力使ってみた
普段はlog4を使っておりましたが
便利そうなものを見つけて使ってみました。
コピペでOKって素敵やん( *´艸`)
↓こちらのブログの内容で作成。
私の開発環境下では
ただ貼り付けただけでは、エラー一覧が凄まじいことになりました・・・(白目
多分開発に慣れている人向けなのかもしれない('_')
また使う時に何したか忘れそうな気もするので、私の追加した操作をメモしておきます。
開発環境:
NET Framework 4.7.2
App.configについて
貼り付ける場所に注意。
私の環境ではデフォルトで▼このようになっていました。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
▲これにブログの内容▼を足しても上手くいかず。
<setting name="IS_LOGFILE" serializeAs="String">
<value>True</value>
</setting>
<setting name="LOG_LEVEL" serializeAs="String">
<value>3</value>
</setting>
<setting name="LOGDIR_PATH" serializeAs="String">
<value>./logs/</value>
</setting>
<setting name="LOGFILE_NAME" serializeAs="String">
<value>console</value>
</setting>
<setting name="LOGFILE_MAXSIZE" serializeAs="String">
<value>10485760</value>
</setting>
<setting name="LOGFILE_PERIOD" serializeAs="String">
<value>30</value>
</setting>
プロジェクトの[Property]>[Settings.settings]という設定ファイルが
デフォルト作成されているので、
これを明示的に変えればいいかと考えて▼このように変更してみました。
※ 値はブログの記載の内容のまま。
これでコンパイルが通ればOKです。
通らない場合は、設定ファイルの名前が違うとかかな。
私はこれでコンパイルすることができました。
コンパイル後のApp.configは▼このようになりました。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="[Project Name].Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<userSettings>
<[Project Name].Properties.Settings>
<setting name="LOGDIR_PATH" serializeAs="String">
<value>./logs/</value>
</setting>
<setting name="LOGFILE_NAME" serializeAs="String">
<value>console</value>
</setting>
<setting name="IS_LOGFILE" serializeAs="String">
<value>True</value>
</setting>
<setting name="LOGFILE_MAXSIZE" serializeAs="String">
<value>10485760</value>
</setting>
<setting name="LOGFILE_PERIOD" serializeAs="String">
<value>30</value>
</setting>
<setting name="LOG_LEVEL" serializeAs="String">
<value>3</value>
</setting>
</[Project Name].Properties.Settings>
</userSettings>
</configuration>
Logger.csについて
内容をコピペした後、冒頭に以下を追加。
"System.IO"は、"Directory"クラス等を呼び出しているので必須。
"System.IO.Compression"は、CompressLogFile()で
CompressionModeクラスを呼び出しているので必須。
"System.Text.RegularExpressions"は、DeleteOldLogFile()で
Regexクラスが使われているので必須。
"[Project Name].Properties"は、”Settings”を呼び出しているので必須。
[Project Name]には、自分の開発中のプロジェクト名を入れたら
予測機能をONにしていれば"Properties"が候補に出てくるはず。
上記は、クラス承継とかしていれば必要ないかもだけど。
▼追加後はこんな感じになるかと思います。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Compression;
using System.Text.RegularExpressions;
using [Project Name].Properties;
実行してみた
▼ボタンイベントに"log.Info("TEST!!");"を追加して実行してみました。
private void btnStart1_Click(object sender, EventArgs e) {
log.Info("TEST!!");
}
▼実行結果(console.log)
[2022-05-02 14:37:30.029][1][INFO] TEST!!
成功しました。
実際にコード動かしてみて、
実行環境の置いてあるディレクトリの一つ上に"log"という
ディレクトリが作成されて
その中に"console.log"が作成されるのですが、
ファイル名とディレクトリを自分で変更しました。
ログファイルの拡張子が*.logだと私の開発アプリでは
不都合だったので、
”.log” ⇒ ".txt"と変更しました。
感想
普段グローバル変数を設定ファイルからいじることがないので
今回のコードでコピペだけでやる場合は
どうするべきかわからず、UIから設定しました。
開発環境に依っては、変更は不要かもしれません。
ログの出力ってアプリ開発では必須なのでは?
と思うくらい私は大切だと思ってます。
実際自分以外のユーザーに使ってもらって発生したバグは
ログがないと初動の判断がしにくいですし、おすし♪
今回のアプリの開発は自作でいこうかと思ってましたが
こちらのコードを利用させていただきました。
ありがとうございます。