ローカル環境ではVisual Studioを利用してデバッグができるため、変数の確認やエラーメッセージの確認に困ることはないかもしれませんが、ローカル環境以外でエラーが発生した場合には、ログ内容を確認してエラーの原因を特定する必要があります。
「Sitecore ログ 出力」で検索してみると、日本語の記事があまり見つからなかったため、この機会にまとめてみようと思います。
テスト環境
- Windows 11
- Sitecore 10.1.1
- VisualStudio 2019 (2022でも大きな違いはないです)
手順
1. コントローラー等の作成
Sitecoreを新規でインストールし、サンプルでサイトを立てました。
ページにアクセスするとビューを返すだけの、簡単なコントローラーを作成しました。
using System.Web.Mvc;
namespace training2024.Controllers
{
public class SampleController : Controller
{
public ActionResult Index() {
return View("/Views/Sample/Index.cshtml");
}
}
}
その他、Index.cshtmlと
Sitecoreのコンテンツエディター内でレイアウト、レンダリングアイテム、テンプレートアイテム、ページアイテムを作成します。
2. コンフィグを追加する
ログ設定を追加するconfigファイルを1つ追加します。
ファイルの配置先: プロジェクトフォルダ\App_Config\Include\z.Training\z.LogSetting.config
テストの為、WARNレベルまでのログが出力されるように設定しています。
z.LogSetting.config
WARN
3. コードの追加
コントローラーにコードを追加します。
参照を追加します。
using log4net;
using Sitecore.Diagnostics;
クラス内共通で利用できるように、クラス宣言のすぐ下に以下のコードを追加します。
private readonly ILog _log = LoggerFactory.GetLogger("AppLog");
ログを実際に出力させるコードを追加します。
_log.Debug("Debugレベルのエラーメッセージテストです。");
_log.Info("Info");
_log.Warn("Warn");
_log.Error("Error");
_log.Fatal("Fatal");
var msg = "Errorレベルのエラーメッセージテストです。";
_log.Error(msg);
最終的に以下のようになりました。
コントローラー
using log4net;
using Sitecore.Diagnostics;
using System.Web.Mvc;
namespace training2024.Controllers
{
public class SampleController : Controller
{
private readonly ILog _log = LoggerFactory.GetLogger("AppLog");
public ActionResult Index() {
_log.Debug("Debugレベルのエラーメッセージテストです。");
_log.Info("Info");
_log.Warn("Warn");
_log.Error("Error");
_log.Fatal("Fatal");
var msg = "Errorレベルのエラーメッセージテストです。";
_log.Error(msg);
return View("/Views/Sample/Index.cshtml");
}
}
}
(Sitecore.Logging.dllがプロジェクトで参照されていない場合は追加する必要があります)
追加完了したら、サイトを発行して変更内容を反映させます。
4. 動作確認
ページにアクセスして動作確認します。
ログはSitecoreをインストールしたApp_Data/logsフォルダ内
(例: C:\inetpub\wwwroot\★サイト名★.prefix\App_Data\logs 内)
に出力されますので、ページにアクセス後にログが出力されているか確認します。
ページアクセス時にコードが実行され、ログファイルに文字が出力されています。
今回は「Warn」レベル以上のエラーを出力するようにconfigファイルで設定しているため「Debug」「Info」レベルのログは出力されません。
使用例
try-catchで取得したエラーメッセージを出力できます。
try
{
//エラーが起きる処理
}
catch(Exception e)
{
_log.Error($"エラーが発生しました: {e.Message}");
}
その他、処理に時間が掛かる部分の調査のために
StopWatch関数を使用して各処理毎の所要時間を計測し、ログに出力して調査を行ったりします。
参考:Stopwatch
クラス (System.Diagnostics) | Microsoft Learn
また、環境毎にログレベルを設定することで、環境毎にログ出力量をある程度コントロールできます。
参考:ロール、環境別にConfigを適応させる方法
ログの量が多すぎてしまう為、本番環境ではDEBUG~INFOレベルのログは出力しないことが多いです。
参考情報
ログ出力コードに関しての内容はこちらを参考にさせて頂きました。
Sitecore
Community Documentation - Sitecore Logging
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。