最近项目上试运行发现, 很多时候网站出了问题或者某个功能不正常, 常常需要运维人员去服务器里面查看一下日志, 看看日志里面会产生什么异常, 这样导致每次都要去远程服务器很不方便, 有时服务器是客户保管的不能让我们随意远程, 最后想到静态文件方法将 log 日志读出来打印到网页上就可以替换远程服务器找到对应 log 日志的目录, 节省了时间和沟通成本; 另: 我们是局域内网系统不是互联网所以对安全不用太考虑, 这样才能把日志输出到页面上面, 如果互联网产品或者安全比较高的不建议这么做
简单说一下实现步骤:
一, 首先我们是通过 Nlog 来记录日志的, Nlog 怎么使用我这不介绍了, 在上篇文章已有说明
二, 在 Startup 类 Configure 中加入静态文件路由的方式
- #region 远程读取日志
- FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
- provider.Mappings[".log"] = "text/plain";
- string basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
- App.UseStaticFiles(new StaticFileOptions()
- {
- FileProvider = new PhysicalFileProvider(Path.Combine(basePath, "logs")),
- ServeUnknownFileTypes = true,
- RequestPath = new PathString("/logs"),
- ContentTypeProvider = provider,
- DefaultContentType = "application/x-msdownload", // 设置未识别的 MIME 类型一个默认 z 值
- });
- App.UseDirectoryBrowser(new DirectoryBrowserOptions()
- {
- FileProvider = new PhysicalFileProvider(Path.Combine(basePath, "logs")),
- RequestPath = new PathString("/logs"),
- });
- #endregion
三, 运行界面:
四, 点击需要查看的日志发现 中文都是乱码
五, 然而直接通过文件打开日志, 并不显示乱码, 大致判断应该是读写的编码格式不对
六, 以上验证 这样说明不是 Nlog 写入的时候为乱码, 最后考虑是不是读取的时候输出为乱码, 我自己在 logs 文件夹下面建了一个 text 文件, 利用网页读取信息, 也不是乱码, 如图所示:
七, 经过多次验证发现 2 个问题: 1.Nlog 在写入日志建日志文件的时候编码格式为 default, 实际格式 ANSI, 需要把文件改成通用编码 UTF-8 ;
这样直接在 nlog 配置文件 文件写入规则里面加一个编码设置 [encoding="utf-8"]
2. 读取. log 类型时必须也要设置读取类型
这样直接将 provider.Mappings[".log"] = "text/plain"; 修改为 provider.Mappings[".log"] = "text/plain;charset=utf-8";
八, 运行验证, 中文没有乱码
Demo 源码 Git 地址: https://github.com/lxshwyan/QuartzDemo.git
来源: https://www.cnblogs.com/lxshwyan/p/10910315.html