如何从Debian Syslog中移除服务器名、进程名及进程ID
清理Debian Syslog冗余信息的ASP.NET解决方案
原始Syslog内容
Dec 25 09:43:28 uvn-76-202 Eeva[7192]: at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) Dec 25 09:43:28 uvn-76-202 Eeva[7192]: at Program.<>c.<<Main>b__3_6>d.MoveNext() in C:\raamat\eevaweb\Store\Program.cs:line 979 Dec 25 09:43:28 uvn-76-202 Eeva[7192]: Dec 25 09:45:01 uvn-76-202 CRON[18528]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Dec 25 09:54:14 uvn-76-202 systemd[1]: Created slice User Slice of UID 0.
期望输出
Dec 25 09:43:28 at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) Dec 25 09:43:28 at Program.<>c.<<Main>b__3_6>d.MoveNext() in C:\raamat\eevaweb\Store\Program.cs:line 979 Dec 25 09:45:01 (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Dec 25 09:54:14 Created slice User Slice of UID 0.
完整解决方案代码
在ASP.NET 9 MVC控制器中,可通过正则表达式批量处理日志内容,移除服务器名、进程名、PID及多余空格,同时过滤空行:
using System.Text.RegularExpressions; public class SyslogCleanerController : Controller { public string CleanSyslogContent(string rawSyslog) { // 正则模式:捕获日期时间,匹配并移除后续的冗余部分 string regexPattern = @"^(\w{3} \d{1,2} \d{2}:\d{2}:\d{2}) \S+ \S+\[\d+\]:\s*"; var regex = new Regex(regexPattern, RegexOptions.Multiline); // 替换冗余内容,仅保留日期时间+日志正文 string cleanedLog = regex.Replace(rawSyslog, "$1 "); // 过滤处理后为空的行 var validLines = cleanedLog.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); return string.Join(Environment.NewLine, validLines); } }
正则表达式说明
^(\w{3} \d{1,2} \d{2}:\d{2}:\d{2}):捕获日志开头的日期时间格式(支持1位日期,如Jan 5)\S+:匹配服务器名称(任意非空白字符组合)\S+\[\d+\]:匹配进程名+PID格式(如Eeva[7192]):\s*:匹配冒号及后续任意数量的空白字符RegexOptions.Multiline:确保^匹配每一行的开头,而非整个字符串的开头
调用此方法时,传入原始Syslog字符串即可得到符合要求的清理后内容。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

