NonSoft

PC起動ログやログインログを出力する
サンプル(VB.NET)


 サンプル(ソース/コード)
パソコンを起動した時のログやユーザがログインした時のログを出力するサンプルです。

タスク・ケジュール(スタート→コントロールパネル→タスク)やスタートアップに
ログ出力するプログラムを登録する事で簡単に実現出来ます。タスク・ケジュールは、
「コンピュータ起動時」や「ログオン時」という指定が出来ます。

つまり、プログラムが起動された時がログを出力するタイミングですのでログを
ファイルに出力すれば良い事になります。

ログ出力する関数はlog4net等を使用せず自力で作った方が簡単です。

パソコン起動ログやログインログや簡単に実現出来ますが、
ログアウトログやシャットダウンログは難しいです。
たぶん、Windowsサービスとして実装しないと実現出来ないかもしれません。

Windowsサービスとして実装したツールはこちらです。
PC状況メール通知(PcEvMail)はPC起動/終了/ログイン/ログアウト時にメール通知するツールです。

★フォームモジュール(Form1.vb)
Public Class Form1

    Private Sub Form1_Load( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WriteTraceLog("パソコンが起動されました。")
        ' WriteTraceLog("ユーザがログインしました。")
    End Sub

    ''' <summary>
    ''' ログ出力
    ''' </summary>
    ''' <param name="msg">メッセージ</param>
    ''' <param name="ex">Exception(無指定の場合はメッセージのみ出力)</param>
    ''' <remarks></remarks>
    Private Shared Sub WriteTraceLog( _
        ByVal msg As String, Optional ByVal ex As Exception = Nothing)
        Try
            ' ログフォルダ名作成
            Dim dt As DateTime = Now
            Dim logFolder As String = System.AppDomain.CurrentDomain.BaseDirectory & "Log"

            ' ログフォルダ名作成
            System.IO.Directory.CreateDirectory(logFolder)

            ' ログファイル名作成
            Dim logFile As String = logFolder & "\TraceLog" & dt.ToString("dd") & ".log"

            ' 翌日分のログファイル削除(1ヶ月分のログファイルしか保存しないようにするため)
            Dim logNext As String = _
                logFolder & "\TraceLog" & dt.AddDays(1).ToString("dd") & ".log"
            System.IO.File.Delete(logNext)

            ' ログ出力文字列作成
            Dim logStr As String
            logStr = dt.ToString("yyyy/MM/dd HH:mm:ss") & vbTab & msg
            If ex Is Nothing = False Then
                logStr = logStr & vbCrLf & ex.ToString
            End If

            ' Shift-JISでログ出力
            Dim sw As IO.StreamWriter = Nothing
            Try
                sw = New IO.StreamWriter( _
                    logFile, True, System.Text.Encoding.GetEncoding("Shift-JIS"))
                sw.WriteLine(logStr)
            Catch ex2 As Exception
            Finally
                If sw Is Nothing = False Then sw.Close()
            End Try
        Catch ex2 As Exception
        End Try
    End Sub

End Class