プログラミングがわからなすぎる

プログラミングがわからなすぎる

気が向いた時の備忘録。プログラミングは好きなのに物凄く単純なものしか理解できないからメモしていくうちに覚えられたらいいな
ターゲットフレームワークは大体4.7.2

log4netでログ出力してみる①の続き

 

 

ソリューションエクスプローラからAssemblyInfo.csを開きます

たぶんPropertiesを開いたらあります

 

そのなかに以下の文を追加

[assembly:log4net.Config.XmlConfigurator(Watch =true, ConfigFile = "log4net.xml")]

log4netの設定をApp.configに記載したいとかの場合は

↑とはちょっとちがうかも

 

 

log4net.xmlのプロパティを開いて

「出力ディレクトリにコピー」という項目が「コピーしない」になっていたら

デバッグ実行でテストしてみてもログが出力されないかもしれないので

コピーする系の設定に変えておきます

 

 

 

 Form1.cs

using System;
using System.Windows.Forms;

namespace LogTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Log.Debug("デバッグ");
            Log.Info("情報");
            Log.Error("エラー", new Exception());

        }
    }
}

 

Formにボタンだけ貼り付けて

その中の処理で適当にログを出力させます

 

 

 

実行してみる 

 

動かしてみるlog4net.xmlだとファイルサイズ最高で100kBで

10個までできてしまい、軽く動かしてみるだけには面倒なので

設定を次のように変えて動かします

    <maximumFileSize value="1KB" />
    <maxSizeRollBackups value="3" />

これなら1kBを超えたらバックアップができて

バックアップも3つ程度で終われそう

 

 

実行してボタンを1回クリックしてみます

 

 

log4net.xmlのfile valueに設定済みのパスに

ログが現れました

 

 

中を開いてみると、この形式で出力されています

 

 

このままボタンを連打してみます

ログのバックアップが3つまで作成されて

それ以上には増えていないようです

 

翌日にまた続けてログを吐いてみましたが

ファイルはこれ以上にはなりませんでした

 

 

参考:

 

 

自分用コピペで何とかするlog4net.xml その①のlog4net.xmlを試すため

log4netの出力環境を整えてみた

 

 

log4netをNugetする 

プロジェクトを右クリックし

「NuGetパッケージの管理」をクリックします

 

 

「参照」タブを選んで

検索ボックスにlog4netを入力して検索するとでてくるので

選択して左のページで「インストール」ボタンをクリックします

アイコンがApacheだ…(初めて知った)

 

 

変更のプレビューが出てきたら「OK」をクリックします

 

 

インストールされたようです

ソリューションエクスプローラの「参照」に

log4netが出てきました

 

 

次はlog4netの設定ファイルとしてlog4net.xmlを作ります

プロジェクトを右クリックして「追加」の「新しい項目」をクリックします

 

 

「XMLファイル」を選択し

名前を「log4net.xml」にして追加作成します

 

作成されたlog4net.xmlに自分用コピペで何とかするlog4net.xml その①で書いた

xmlをまるまる貼り付けて保存しておきます

 

Assenbly.csへの追加とログ出力クラスの追加はまた次で書きます

 

log4net.xmlの書き方をいちいち調べるのが面倒なので

コピペでとりあえず出力できそうなものを作ってみた

 

経験上、ログ出力ファイルは大体以下の2パターンを使うことがあります

①決まったファイル名のログファイルに出力し、バックアップ以上に増えすぎると上書きされる

②日付入りファイル名のログファイルに出力し、毎日ログファイルが作成される

 

今回は↑の①のほうを作ってみた

クライアントで動くアプリで、ログ削除機能とか盛り込んでない時に

一定以上からは増えないから良さそうですね

(今度時間があるときに動かしてみる)

 

log4net.xml

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="C:\tmp\TestProgramLog.log" />
    <appendToFile value="true" />
    <maximumFileSize value="100KB" />
    <maxSizeRollBackups value="10" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d[%-5level][%t]%m%n" />
    </layout>
  </appender>
  <root>
    <level value="DEBUG" />
    <appender-ref ref="RollingFile" />       
  </root>
</log4net>

 

ファイル名はこのままだとTestProgramLog.logになってしまうので変更が必要

ログの形式は

 日付[レベル][スレッド]メッセージ

で作成しました

たぶん以下みたいな出力になるかな?

 2024-07-16 20:13:41,514[INFO ][1]start

 

 

参考:

 

DBにとりあえず大量のレコードを入れないといけないとき

ループってどうやるんだっけ?ってなるので

コピペでいけるようメモです
 

DECLARE @index integer
SET @index = 0

WHILE @index < 10
BEGIN
    INSERT INTO Product VALUES (...);
    SET @index = @index + 1
END

 

ループは

WHILE (ループ条件)

BEGIN

    (ループ内容)

END

という風に書くらしい

 

◆UUIDのカラムがある、特定のカラムをそれぞれ若干変えたいとき

以下の例は名前カラムをname1、name2、…という風に設定するつもりクエリ

 

DECLARE @index integer
DECLARE @name varchar(100)

SET @index = 0

WHILE @index < 10
BEGIN
    SET @index = @index + 1
    SET @name = 'name' + CAST(@index as varchar)
    INSERT INTO Product VALUES (NEWID(), @name,...);
END

 

 

参考:

 

 

DBに任意のレコードを追加して何か動かさないといけない時

テーブルにuniqueidentifier型のカラムがあると

UUIDってどうやって作るんだっけ…って焦るので

コピペで対応するためのメモ

対象のDBはSQLServerです

 

DECLARE @uuid uniqueidentifier;
SET @uuid = NEWID();

 

NEWID()でいいらしい

INSERT INTO TestTable VALUES (@uuid, ....)ってすれば入るのかな

 

ついでのメモ:

変数の宣言は

DECLARE @変数名 変数の型;

値の設定は

SET @変数名 = 値;

 

 

参考:

 

クエリの実行はこのサイトを使用させていただきました

ブラウザでクエリを試せるのがとても助かる!