DioDocs for Excelでは、ロギング機能を使用して、ログを出力し、根本原因を突き止めることで問題を解決することができます。また、JSONファイルの構成に基づいて、debug(デバッグ)、error(エラー)、warn(警告)、info(情報)などのさまざまなログレベルを保存できます。
DioDocs for Excelは、他の外部ライブラリとともにMicrosoft.Extensions.Loggingライブラリを使用してロギング機能を実装します。ロギング情報は、JsonとExcelのインポート/エクスポート、およびPDFエクスポートでサポートされます。ロギング機能はデフォルトで無効になっています。有効にするには、アプリケーションまたはWebサイトを初期化するときにWorkbook.LoggerFactoryプロパティを設定します。詳細については、以下のセクションを参照してください。
次は、DioDocs for Excelではロギング機能を有効にする手順を示します。ログはコンソールに出力され、ファイルに保存されます。
C# |
コードのコピー
|
---|---|
private static ILoggerFactory CreateLoggerFactory() { var builder = new ConfigurationBuilder(). SetBasePath(Directory.GetCurrentDirectory()). AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); var cfgRoot = builder.Build(); var loggingCfg = cfgRoot.GetSection("Logging"); var factory = LoggerFactory.Create( logBuilder => logBuilder.AddConfiguration(loggingCfg).AddConsole()); factory.AddFile(loggingCfg); return factory; } |
C# |
コードのコピー
|
---|---|
static void Main(string[] args) { using (var loggerFactory = CreateLoggerFactory()) { Workbook.LoggerFactory = loggerFactory; var wb = new Workbook(); try { wb.Save("test.pdf"); } catch (Exception) { } } } |
JSON |
コードのコピー
|
---|---|
{ "Logging": { "LogLevel": { "Default": "Information" }, "PathFormat": "log-{Date}.txt" } } |
DioDocs for Excelでは、デバッグ、情報、警告、エラーの4つのログレベルを設定できます。それらの優先順位は次のとおりです。
デバッグ < 情報 < 警告 < エラー
ログファイルに出力するログレベルを構成できます。ログレベルを設定すると、これより上位または同じのログレベルのメッセージが出力されたログに含まれ、優先度が低いログは無視されます。たとえば、ログレベルを「情報」に設定すると、情報、警告、およびエラーのログが出力されるが、デバッグは無視されます。
appsettings.jsonでデフォルトのログレベルを「警告」に設定し、DioDocs for Excelのログレベルを「情報」に設定する方法については、次のサンプルコードを参照してください。
JSON |
コードのコピー
|
---|---|
{ "Logging": { "LogLevel": { "Default": "Warning", "GrapeCity.Documents.Excel": "Information" } } } |
コンソール出力でDioDocs for Excelのログレベルを「情報」に設定する方法については、次のサンプルコードを参照してください。
JSON |
コードのコピー
|
---|---|
{ "Logging": { "LogLevel": { "Default": "Warning" }, "Console": { "LogLevel": { "GrapeCity.Documents.Excel": "Information" } } } } |
詳細については、「.NET Core および ASP.NET Core でのログ記録」を参照してください。
ログファイルにログとともにスレッドIDを表示することもできます。これは、特定のプロセスまたは問題を引き起こしているスレッドを分析するために役立ちます。appsettingsファイルは、Microsoft.Extensions.Logging形式を使用してログを生成します。
スレッドIDを持つログ記録を保存する方法については、次の手順を参照してください。
C# |
コードのコピー
|
---|---|
private static ILoggerFactory CreateLoggerFactory() { var appSettings = new ConfigurationBuilder(). SetBasePath(Directory.GetCurrentDirectory()). AddJsonFile("appsettings.json", optional: true, reloadOnChange: true). Build(); var loggingSection = appSettings.GetSection("Logging"); var serilogConfig = new LoggerConfiguration(); ConfigureSerilog(loggingSection, serilogConfig); var factory = new LoggerFactory(); factory.AddSerilog(serilogConfig.CreateLogger()); return factory; } private static void ConfigureSerilog(IConfigurationSection loggingSection, LoggerConfiguration loggerCfg) { loggerCfg.Enrich.WithThreadId(); string pathFormat = loggingSection["PathFormat"]; string outputTemplate = loggingSection["OutputTemplate"]; loggerCfg.WriteTo.RollingFile(pathFormat, outputTemplate: outputTemplate); ConfigureMinLevel(loggerCfg.MinimumLevel, loggingSection); } private static void ConfigureMinLevel(LoggerMinimumLevelConfiguration minimumLevel, IConfigurationSection loggingCfgSection) { var logLevelSection = loggingCfgSection.GetSection("LogLevel"); int pathLength = logLevelSection.Path.Length; foreach (var logItem in logLevelSection.AsEnumerable()) { if (logItem.Key.Length <= pathLength) { continue; } string name = logItem.Key.Substring(pathLength + 1); if (Enum.TryParse(logItem.Value, ignoreCase: true, out LogLevel level)) { var serilogLevel = (LogEventLevel)level; if (name == "Default") { minimumLevel.Is(serilogLevel); } else { minimumLevel.Override(name, serilogLevel); } } } } |
C# |
コードのコピー
|
---|---|
static void Main(string[] args) { static void Main() { using (ILoggerFactory loggerFactory = CreateLoggerFactory()) { Workbook.LoggerFactory = loggerFactory; Workbook wb = new Workbook(); try { wb.Save("test.pdf") } catch(Exception) { } } } } |
C# |
コードのコピー
|
---|---|
{ "Logging": { "LogLevel": { "Default": "Warning", "GrapeCity.Documents.Excel": "Debug" }, "PathFormat": "log-{Date}.txt", "OutputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} (Thread {ThreadId}) [{Level}] {Message}{NewLine}{Exception}" } } |
Text |
コードのコピー
|
---|---|
2020-09-10 11:44:30.566 +08:00 (Thread 1) [Debug] Save pdf of the workbook. 2020-09-10 11:44:30.615 +08:00 (Thread 1) [Debug] Paginate Start(Workbook) 2020-09-10 11:44:31.104 +08:00 (Thread 1) [Debug] GetDigitWidthOfDefaultStyle GraphicsType: Pdf 2020-09-10 11:44:31.108 +08:00 (Thread 1) [Debug] GetDigitWidthOfDefaultStyle DefaultFont: "FontName = Calibri FontSize = 11 Bold = False Italic = False ScreenWidth = 0 PDFWidth = 5.5751953125 " 2020-09-10 11:44:31.161 +08:00 (Thread 1) [Debug] Count of print ranges: 0 2020-09-10 11:44:31.161 +08:00 (Thread 1) [Debug] Paginate End(Workbook) 2020-09-10 11:44:31.164 +08:00 (Thread 1) [Error] There is no content to print. |