如何修改DevExpress自定义LoggerService代码将异常记录到文件
修改方案
你原代码中使用的System.Diagnostics.Debug.WriteLine仅在Debug编译模式下生效,Release发布后不会输出内容,只需将输出逻辑替换为文件写入即可,同时要处理并发写入冲突问题,修改后的代码如下:
using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Web; namespace ServerSide { public class MyLoggerService : DevExpress.XtraReports.Web.ClientControls.LoggerService { // 加锁避免多线程同时写入文件导致冲突 private static readonly object _lockObj = new object(); // 日志文件存放路径,这里默认存在项目的App_Data目录下,按天生成日志文件 private readonly string _logPath = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data", $"ReportLogs_{DateTime.Now:yyyyMMdd}.txt"); public override void Info(string message) { string logContent = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]: Info: '{message}'{Environment.NewLine}"; WriteLogToFile(logContent); } public override void Error(Exception exception, string message) { string logContent = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]: Exception occurred. Message: '{message}'. Exception Details:{Environment.NewLine}{exception}{Environment.NewLine}{new string('-',50)}{Environment.NewLine}"; WriteLogToFile(logContent); } private void WriteLogToFile(string content) { lock (_lockObj) { // 确保目录存在 var directory = Path.GetDirectoryName(_logPath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } // 追加写入日志 File.AppendAllText(_logPath, content); } } } }
注意事项
- 日志路径可自行调整,优先选择
App_Data目录:该目录默认不允许外部直接访问,避免日志内容泄露,同时ASP.NET应用默认对该目录有读写权限 - 如果部署到IIS后出现日志无法写入的情况,检查日志存放目录的权限:给对应应用程序池的运行身份授予目录的「读取/写入」权限即可
- 代码默认按天生成独立的日志文件,避免单文件过大不便排查问题,可以根据自己的需求调整日志文件名生成规则
内容的提问来源于stack exchange,提问作者Ionut
相关产品推荐
相关产品推荐

