第十章:日志系统与项目部署
博客v1.0系列教程(Csharp)博客 v1.0 系列教程 (C#)
10.1 Serilog 日志配置
// Program.cs
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/blog-.log",
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 30)
.CreateLogger();
builder.Host.UseSerilog();
10.2 审计日志
public class LogService : ILogService
{
private readonly IRepository<LogModel> _logRepo;
public async Task RecordLogAsync(LogDto dto)
{
var log = new LogModel
{
Type = dto.Type, // login/operation/error
Level = dto.Level, // info/warning/error
Message = dto.Message,
Ip = dto.Ip,
UserId = dto.UserId,
CreateTime = DateTime.UtcNow
};
await _logRepo.InsertAsync(log);
}
public async Task<PageResult<LogModel>> GetLogsAsync(
int page, int pageSize, string? type, string? level)
{
var query = _logRepo.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(type), l => l.Type == type)
.WhereIF(!string.IsNullOrEmpty(level), l => l.Level == level)
.OrderBy(l => l.CreateTime, OrderByType.Descending);
var total = await query.CountAsync();
var items = await query.Skip((page - 1) * pageSize)
.Take(pageSize).ToListAsync();
return new PageResult<LogModel>(items, total, page, pageSize);
}
}
10.3 Docker Compose 配置
version: '3.8'
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_DB: blog
POSTGRES_USER: blog
POSTGRES_PASSWORD: blog123
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
elasticsearch: # 可选
image: elasticsearch:8.12.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
volumes:
pgdata:
10.4 一键部署脚本 (deploy.ps1)
# 1. 构建前端
cd Blog.Vue
npm run build
# 2. 发布后端
cd ../Blog.Api
dotnet publish -c Release -o ../publish
10.5 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "Blog.Api.dll"]
至此,博客 v1.0 (C#) 系列教程完成!我们从项目架构设计开始,逐步实现了完整的博客系统。
csharploggingserilogdockerdeploy