日志在生产环境排查定位问题的作用不多赘述,战过bug的都知道。目前公司的项目主要是用log4net记录日志,通过封装,实现了SQLServer、MySQL、MongoDB和文本日志的记录,便于在不同情境中使用。最近的一个项目首次使用log4net+MySQL记录日志,开发部署过程中遇到几个问题,在此简单总结一下,以便后面回顾。
- log4net.config配置
1.所在项目的assembly文件中添加:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Config/log4net.config", Watch = true)]
2.log4net.config数据库及日志表配置
- 自定义日志表字段
1.配置如下:
2.代码如下:
public class CustomLayout: PatternLayout { public CustomLayout() { AddConverter("appid", typeof(CustomLogParameter.AppIdParameter)); AddConverter("searchkey", typeof(CustomLogParameter.SearchKeyParameter)); } }
3.参考文章: Log4net 自定义字段到数据库(二)public class CustomLogParameter { internal sealed class SearchKeyParameter: PatternLayoutConverter { protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) { CustomLogMessage message = loggingEvent.MessageObject as CustomLogMessage; if (message != null) { writer.Write(message.SearchKey); } } } internal sealed class AppIdParameter : PatternLayoutConverter { protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) { CustomLogMessage message = loggingEvent.MessageObject as CustomLogMessage; if (message != null) { writer.Write(message.AppId); } } } }
- 部署第二天后没有日志输出
1.log4net.config添加配置如下:
<!--数据库连接错误时重新连接 --> <param name="ReconnectOnError" value="true"/>