使用log4net,我已经看到了使用称为NDC的每线程堆栈上下文标签的可能性。 通过指定%x或%ndc格式参数,在此堆栈上推送的标签将显示在PatternLayout中。 用法是这样的: ILog log = log4net.LogManager.GetLogger(…) ; //pattern layout format: "[%ndc] – %message%newline" log.Info("message 1"); using(log4net.NDC.Push("context") { using(log4net.NDC.Push("inner_context") { log.Info("message 2"); } log.Info("message 3"); } log.Info("message 4"); 输出是这样的: null – message 1 context inner_context – message 2 context – message 3 null – message 4 在你使用log4net的编程经验中,你什么时候发现这个function是有用的?
在Xcode的debugging版本中,无论是使用模拟器还是实际的设备,NSLog,printf,fprintf assert和NSAssert语句都会在控制台上出现 如果我现在在设备上运行一个发布版本(比如说我发送一个testing飞行版本,并在我的iPhone上发布它,这将是一个发布版本),哪些(如果有的话)被logging? 我如何检索日志? NSLog实际上是在发布版本上输出的东西吗? 什么是决定性因素? 无论是写入stdout还是stderr? 只有stderr写入设备日志? 这是否意味着我必须使用fprintf? 是否有任何写入设备日志? 有甚至有这样的事情吗? 如果是这样,如何捡起来? 有人能澄清这个情况吗?
我最近发现了一个导致NullPointerException的bug。 使用标准的slf4j语句捕获并loggingexception。 以下摘录代码: for(Action action : actions.getActions()) { try { context = action.execute(context); } catch (Exception e) { logger.error("…", e); break; } } 正如你所看到的,没有什么幻想。 但是,在我们所有的exception日志语句中,只有这个不打印堆栈跟踪。 所有它打印的是消息(表示为“…”)和exception类的名称(java.lang.NullPointerException)。 由于exception的堆栈跟踪是懒加载的,我想也许有一种指令重新sorting的问题,并决定在日志语句之前调用e.getStackTrace()。 这没有什么区别。 所以我决定重新启动debugging代理。 但是,因为我甚至连接到进程,我注意到现在堆栈跟踪正在打印。 所以很显然,debugging代理的存在会导致一些额外的debugging信息变得可用。 我从那以后解决了exception的根本原因。 但我想知道为什么没有debugging器的堆栈跟踪是不可用的。 有人知道吗? 澄清: 这不是一个日志logging问题 。 想象一下同样的try / catch子句,但在catch中,我打印出下面的值: e.getStackTrace().length 没有debugging器打印“0”,用debugging器打印一个正数(在这种情况下是9)。 更多信息:这发生在JDK 1.6.0_13,64位,amd64,linux 2.6.9上
通常情况下,你只需要logger服务,日志转到: %kernel.root_dir%/%kernel.environment%.log 我想从SOAP服务中只logging消息到: %kernel.root_dir%/%kernel.environment%.soap.log 不要主要的日志文件。 我已经阅读了食谱,但我不明白如何configurationmonolog。 任何帮助,线索?
很明显为什么堆栈跟踪会受到微软新的编程模式的影响。 我们现在有一个语义堆栈和一些物理的(我select的话)。 我看到的是一个exception的StackTrace属性(在debugging器中)是物理的,连接在一起: private async Task CheckFooAndBar() { var log = LogManager.GetLogger("Test"); log.Info("CheckFooAndBar"); try { await Foo(); } catch (Exception ex) { log.Info("StackTrace of last exception: " + ex.StackTrace); } Console.ReadKey(); } private async Task Foo() { await Task.Factory.StartNew(() => Thread.Sleep(1000)); await Bar(); await Task.Factory.StartNew(() => Thread.Sleep(1000)); } private async Task Bar() { await Task.Factory.StartNew(() […]
我有一个将由非技术用户交互式运行的脚本。 该脚本将状态更新写入STDOUT,以便用户可以确定脚本运行正常。 我希望STDOUT和STDERR都redirect到terminal(这样用户可以看到脚本正在工作以及是否有问题)。 我也希望这两个streamredirect到一个日志文件。 我在网上看到了一堆解决scheme。 有些不起作用,而另外一些则非常复杂。 我已经开发了一个可行的解决scheme(我将作为答案input),但是它很笨拙。 完美的解决scheme将是一行代码,可以合并到任何脚本的开始,这两个脚本都将stream发送到terminal和日志文件。 编辑:redirectSTDERR STDOUT和pipe道结果三通工程,但它取决于用户记住redirect和pipe道输出。 我希望logging是傻瓜式的和自动的(这就是为什么我想能够将解决schemeembedded到脚本本身中。)
我想知道如何设置更具体的日志logging系统。 我所有的任务都使用 logger = logging.getLogger(__name__) 作为模块范围的logging器。 我想芹菜login到“celeryd.log”和我的任务“tasks.log”,但我不知道如何得到这个工作。 使用django-celery中的CELERYD_LOG_FILE我可以将所有芹菜相关的日志消息路由到celeryd.log,但没有任何在我的任务中创build的日志消息的跟踪。
当我将文件的值设置为logs\log-file.txt ,它会在哪里创build这个文件夹? 在/bin目录中? 我的web.config如下所示: <log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="logs\log-file.txt" /> <appendToFile value="true" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" /> </layout> </appender> </log4net> 这是正确的方法来logging: ILog logger = LogManager.GetLogger(typeof(CCController)); logger.Error("Some Page", ex); // where ex is the exception instance
我假设大部分人都知道android.util.Log所有的日志logging方法都接受'String tag'作为第一个参数。 而我的问题是, 你如何通常在你的应用程序中标记你的日志? 我已经看到了这样的硬编码: public class MyActivity extends Activity { private static final String TAG = "MyActivity"; //… public void method () { //… Log.d(TAG, "Some logging"); } } 这看起来不太好,原因很多: 你可以告诉我这个代码没有硬编码,但它确实。 我的应用程序可以有不同包中具有相同名称的任何数量的类。 所以这将是很难读取日志。 这不灵活。 你总是把一个私人领域的标签放入你的class级。 有没有什么好办法让一个class的TAG?
我想看看PostgreSQL日志文件,看看我的应用程序写入他们,但我找不到它们。 有任何想法吗?