最近のブラウザではページの翻訳が簡単に表示できるようになったから、メーカーのフォーラムサイトを見ることも苦じゃなくなった。 自分の知らない情報やテクニックがあって、おおっと思うことも多いんだけど、しばらくしたら頭から抜け落ちてしまう。
その中でも、忘れずに覚えておきたいって思ったのが、4月に投稿されたCFからWindowsのEventログに書き込みたいっていう質問。
ColdFusionには、CFのログファイルに書き出す<cflog>(関数だとwriteLog())
とか、任意のファイルに書き出す<cffile>(関数だとfilewrite())
とかはあるけど、Windowsのイベントログに直接書き出すような機能は無い。
なので、イベントログに書き出すとしたら、<cfexecute>
でバッチとかパワーシェルを呼び出して何とかできるかなと思っていた(実際に、投稿の返信で<cfexecute>
でパワーシェルを実行するコードが紹介されていた)。
その後、<cfexecute>
のやり方を紹介した人が<cfobject type=".NET" ...>
でも出来たという実験コードを紹介してくれた。もちろん、日本語でも書き込みできる。
<cfobject type=".NET" name="eventLogClass" class="System.Diagnostics.EventLog"> <!--- Obtain an EventLog instance ---> <cfset eventLog=eventLogClass.init()> <cfobject type=".NET" name="eventLogEntryType" class="System.Diagnostics.EventLogEntryType"> <!--- EventLogEntryType is a C# enum. "Information" type corresponds to the value 4.---> <cfset eventLogInformationType=eventLogEntryType.Information> <!--- The event source ---> <cfset eventSource="テストアプリ"> <!--- The event log message, which will be written as 'EventData' ---> <cfset eventMessage="あいうえお"> <!--- Write the message ---> <cfset eventLog.WriteEntry(eventSource, eventMessage, eventLogInformationType)>
実行結果
補足
上記のプログラムを動作させるには、ColdFusion .NET Service が実行されている必要がある。ColdFusionをインストールする際のオプションで「.NET Integration Services」を選択してインストールしておくか、後から、ColdFusionダウンロードページで「ColdFusion(2021 リリース).NET 統合サービスインストーラー」をダウンロードしてインストールする。