我想让 log4net 和 elmah 正常工作。我尝试将代码放在 AppHost.cs 中:
public class AppHost : AppHostBase {
//Tell ServiceStack the name and where to find your web services
public AppHost() : base("Backbone.js TODO", typeof(TodoService).Assembly) { }
public override void Configure(Funq.Container container) {
//...
//Log4Net 1.2.11
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
container.Register(x => new Log4NetFactory(true));
//Elmah
container.Register(x => new ElmahLogFactory(container.Resolve<Log4NetFactory>()));
LogManager.LogFactory = container.Resolve<ElmahLogFactory>();
container.Register<ILog>(x => LogManager.GetLogger(GetType()));
//...
}
Log4net.config,目前只是一个控制台记录器...
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%method %-5level - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="TraceAppender"/>
</root>
</log4net>
然后在需要记录器的地方:
ILog Logger {get; set;} //injected by ioc
//...
Logger.Info("Print something");
Logger.Info("....");
行调用时没有错误,但 Log4Net 和 Elmah 都没有打印上面代码中的任何输出。如果您有使用 ServiceStack 设置 log4net 或 elmah 的经验,您能否指出我做错了什么?
编辑
将 FileInfo 更改为完整路径,它按照 Stefan Egli 的建议工作!
或者单击项目中“属性”框中的 log4net.config xml 文件
“复制到输出 -> 如果较新则复制”
那也行。
然后,出现这样的情况:
Auto-attach to process '[11308] w3wp.exe' on machine 'Desktop' succeeded.
//... printing info now ...
Backbone.Todos.AppHost: Info INFO - TodoService OnGet
//... but then after a coffee break ...
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]
// ... Oops, no longer printing any log ...
网络应用程序似乎在闲置一段时间后自行关闭。然后,当我单击网络应用程序时,log4net 无法再次重新启动...知道如何防止这种情况吗?
编辑2
切换到 NLog,从此幸福快乐......
最佳答案
Elmah 用于异常日志记录,因此根据您迄今为止发布的内容,我不希望在 elmah 日志中看到任何内容。 Log4net 可能找不到配置文件:尝试使用完整路径以查看是否可以解决问题。如果确实如此,您需要弄清楚如何动态获取正确的路径。
关于c# - ServiceStack 日志记录设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347691/