見出し画像

[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]という設定ファイルが
デフォルト作成されているので、
これを明示的に変えればいいかと考えて▼このように変更してみました。

※ 値はブログの記載の内容のまま。

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から設定しました。

開発環境に依っては、変更は不要かもしれません。

ログの出力ってアプリ開発では必須なのでは?
と思うくらい私は大切だと思ってます。

実際自分以外のユーザーに使ってもらって発生したバグは
ログがないと初動の判断がしにくいですし、おすし♪

今回のアプリの開発は自作でいこうかと思ってましたが
こちらのコードを利用させていただきました。

ありがとうございます。

この記事が気に入ったらサポートをしてみませんか?