我正在使用NLog来记录我的asp.net mvc(C#)应用程序中的异常.
NLog无法在发布模式下工作.在调试模式下运行时也一样.
可能是什么问题?有没有解决这个问题?
我有一个基于Tekpub Starter Site的MVC2应用程序,所以它使用Ninject进行依赖注入,NLog用于日志记录,以及各种各样的其他库.据我所知,正是这些导致了我的问题.
使用ASP.NET开发服务器(Cassini)在我的PC上工作得非常好但是当我部署到服务器(这是一个廉价的共享主机交易)时,我得到一个NullReferenceException似乎与Ninject实例化记录器有关.
这是我的Global.asax.cs的相关位
protected override void OnApplicationStarted() {
Logger.Info("App is starting"); // <-- I think this is what's causing the problem
RegisterRoutes(RouteTable.Routes);
//MvcContrib.Routing.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
SetEngines();
}
protected override IKernel CreateKernel() {
return Container;
}
internal class SiteModule : NinjectModule {
public override void Load() {
Bind<ILogger>().To<NLogLogger>();
// and a couple of others...
}
}
protected void Application_End() {
Logger.Info("App is shutting down");
}
protected void Application_Error() {
Exception lastException = Server.GetLastError();
Logger.Fatal(lastException);
}
public ILogger Logger …Run Code Online (Sandbox Code Playgroud) dependency-injection shared-hosting ninject nlog asp.net-mvc-2
我正在使用NLog进行日志记录,我使用包装器来调用日志方法,我的问题是:如果我尝试打印有关调用site(${callsite})的信息,它会打印包装器方法而不是导致记录器记录的原始方法.
有没有办法获得调用包装器方法的原始方法?
我正在使用NLog进行日志记录.目前我的Layout-String是:
"${date:format=dd.MM.yyyy HH\\:mm\\:ss,fff} | ${level:uppercase=true} | ${message}"
Run Code Online (Sandbox Code Playgroud)
这会产生以下日志:
18.12.2013 11:23:14,834 | INFO | this is an info
18.12.2013 11:23:14,835 | TRACE | this is a trace
Run Code Online (Sandbox Code Playgroud)
我现在想要的是格式化"$ level"以填充Whitespaces,使其看起来像一个包含5个字符的表.
我想拥有:
18.12.2013 11:23:14,834 | INFO | this is an info
18.12.2013 11:23:14,835 | TRACE | this is a trace
Run Code Online (Sandbox Code Playgroud)
我没有发现任何遗憾......任何人都可以帮忙吗?
我正在使用NLog进行一些日志记录,我遇到了归档和文件名的问题.
我正在代码中创建日志记录配置(我正在编写一个包装器来公开一些特定的功能),并且我已经FileTarget使用这些选项创建了对象:
this._fileTarget.FileName = "${date:format=yyyy-MM-dd hh.mm.ss}.log";
this._fileTarget.ArchiveAboveSize = Math.Pow(1024, 2) * 5; //5MB
this._fileTarget.ArchiveNumbering = ArchiveNumberingMode.Date;
this._fileTarget.ArchiveEvery = FileArchivePeriod.Day;
this._fileTarget.ArchiveDateFormat = "yyyy-MM-dd hh.mm.ss";
Run Code Online (Sandbox Code Playgroud)
我不确定为什么NLog会这样做,但是文件名布局会每秒创建一个新的日志文件,而不是仅仅使用文件名,直到存档期间结束.
我将缓存的目标包装器添加到文件名中:
this._fileTarget.FileName = "${cached:cached=true:inner=${date:format=yyyy-MM-dd hh.mm.ss}.log}";
Run Code Online (Sandbox Code Playgroud)
但是所有购买的东西都是一个现在永远不会改变的文件名,在归档时看起来像这样
2014-12-03 12.00.00.2014-12-03 12.00.00.log
2014-12-03 12.00.00.2014-12-03 12.10.00.log
etc...
Run Code Online (Sandbox Code Playgroud)
是否可以告诉NLog只根据文件大小和日期归档文件,并忽略归档编号和日期格式?我正在尝试生成日志文件,其名称是创建时间的时间戳,其中新文件仅在特定大小或每天创建.
编辑: 这是我想要实现的目标:
在申请开始
"yyyy-MM-dd hh.mm.ss".txt使用当前时间戳创建具有文件名的日志文件(示例 - >"2014-04-29 11:11:11.txt")离开我的Log文件夹看起来像这样:
Logs
|
|> 2014-12-10 12:50:50.txt (1024 kb)
|> 2014-12-10 12:50:55.txt (1020 kb)
|> 2014-12-10 12:51:01.txt (1024 kb)
|> 2014-12-10 12:51:10.txt (1003 kb)
|> 2014-12-10 …Run Code Online (Sandbox Code Playgroud) 我正在使用NLog,我想同时登录RichTextBox和File.我想以编程方式配置Logger,而不是使用xml配置文件.
以下代码仅记录到最后一个目标(在本例中为File).有人可以帮忙吗?
RichTextBoxTarget t1 = new RichTextBoxTarget();
t1.Layout = "${date} ${message}";
t1.ControlName = "rtb_log";
t1.FormName = "MainForm";
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(t1, LogLevel.Debug);
FileTarget t2 = new FileTarget();
t2.Layout = "${date} ${level} ${message}";
t2.FileName = "${basedir}/Logs/today.log";
t2.KeepFileOpen = false;
t2.Encoding = "iso-8859-2";
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(t2, LogLevel.Trace);
Logger logger = LogManager.GetLogger("MyLogger");
Run Code Online (Sandbox Code Playgroud) 我有一个问题,NLog使用此配置记录其内部日志
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true"
internalLogFile="${basedir}/App_Data/NLog.log"
internalLogLevel="Trace">
<targets>
<target name="debug"
xsi:type="File"
fileName="${basedir}/App_Data/Site.log" />
</targets>
<rules>
<logger name="*"
writeTo="debug" />
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
目标"debug"运行良好,但是如果我将它设置为例如"D:/NLog.log",则internalLogFile才有效.
知道为什么会这样吗?
有没有办法配置NLog自动记录我的应用程序可以发送的所有异常?目前我将去所有TRY/CATCH块并在CATCH中手动添加日志记录 - 但如果我错过了一些怎么办?如果将来其他人做了什么呢?
有没有办法告诉NLog始终记录所有异常?特别是一些没有被捕获并可能导致弹出窗口?
我想在NLog输出的每一行添加一个字符串.逻辑保持不变,尝试获取当前用户,如果成功,则将当前用户添加到输出.
我知道每次如何实现它,但我想在一个地方设置这个模板,而不是在每次写作时重复它.