如何将行号打印到日志中.假设在向日志输出一些信息时,我还想打印输出在源代码中的行号.正如我们在堆栈跟踪中看到的,它显示发生异常的行号.异常对象上有堆栈跟踪.
其他替代方案可以是在打印到日志时手动包括行号.还有其他方法吗?
在我们的软件中,我们广泛使用MDC来跟踪会话ID和Web请求的用户名等内容.这在原始线程中运行时工作正常.但是,有很多事情需要在后台处理.为此,我们使用java.concurrent.ThreadPoolExecutor和java.util.Timer类以及一些自动异步执行服务.所有这些服务都管理自己的线程池.
这就是Logback的手册在这样的环境中使用MDC所要说的:
映射的诊断上下文的副本不能始终由来自启动线程的工作线程继承.当java.util.concurrent.Executors用于线程管理时就是这种情况.例如,newCachedThreadPool方法创建一个ThreadPoolExecutor,就像其他线程池代码一样,它具有复杂的线程创建逻辑.
在这种情况下,建议在将任务提交给执行程序之前,在原始(主)线程上调用MDC.getCopyOfContextMap().当任务运行时,作为其第一个操作,它应调用MDC.setContextMapValues()以将原始MDC值的存储副本与新的Executor托管线程相关联.
这样会很好,但是很容易忘记添加这些调用,并且没有简单的方法来识别问题,直到为时已晚.Log4j的唯一标志是您在日志中丢失了MDC信息,而使用Logback,您会收到过时的MDC信息(因为胎面池中的线程从其上运行的第一个任务继承其MDC).两者都是生产系统中的严重问题.
我不认为我们的情况有任何特殊之处,但我在网上找不到这个问题.显然,这不是很多人碰到的东西,所以必须有办法避免它.我们在这做错了什么?
我需要从日志文件中检索最后100行日志.我尝试了sed命令
sed -n -e '100,$p' logfilename
Run Code Online (Sandbox Code Playgroud)
请让我知道如何更改此命令以专门检索最后 100行.
我有一种情况,我想将我创建的所有日志写入文本文件.
我们使用java.util.logging.Logger API来生成日志.
我试过了:
private static Logger logger = Logger.getLogger(className.class.getName());
FileHandler fh;
fh = new FileHandler("C:/className.log");
logger.addHandler(fh);
Run Code Online (Sandbox Code Playgroud)
但仍然只在控制台上登录....
我必须将哪些变量设置/传递给JVM才能使log4j正常运行?正确地说,我的意思是不要抱怨并打印到控制台.我能看到一个典型的例子吗?
注意:我需要避免在应用程序中创建log4j.properties文件.
如何记录我的Python错误?
try:
do_something()
except:
# How can I log my exception here, complete with its traceback?
Run Code Online (Sandbox Code Playgroud) 我在集成测试套件中使用commons-httpclient 3.1.HttpClient的默认日志记录非常嘈杂,我似乎无法将其关闭.我试过按照这里的说明,但没有一个有任何区别.
大多数情况下,我只需要关闭org.apache.http.wire记录器.问题的一部分是我不知道HttpClient尝试使用什么类型的记录器,大多数问题是我之前从未使用过这个库.我尝试创建一个log4j.properties文件并将其放在我的test/resources文件夹中,修改jre/lib中的master logging.properties文件,并按照日志页面上的指定将各种日志记录选项发送到Maven ,而不是它们都没有有所作为.
任何帮助表示赞赏......这让我疯狂.
更新:更正:看来有问题的输出实际上是通过jwebunit使用HttpClient而不是我自己的.无论哪种方式,这都是不可取的.
更新:感谢迄今为止的尝试.我已经尝试了下面提出的所有建议,但仍然没有运气.我在src/test/resources文件夹中有一个文件commons-logging.properties,其中包含以下内容
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties
Run Code Online (Sandbox Code Playgroud)
以及具有以下内容的同一文件夹中的文件log4j.properties
log4j.rootLogger=ERROR, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%c] %m%n
#This is the line that should make httpclient shut up
log4j.logger.org.apache.http=ERROR
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的测试时,我仍然得到一堆像这样的输出:
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\r][\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " </ul>[\n]"
21:57:41.413 [main] DEBUG org.apache.http.wire - << " [\n]"
21:57:41.424 [main] DEBUG …Run Code Online (Sandbox Code Playgroud) 有哪些动态更改log4j日志级别的方法,以便我不必重新部署应用程序.在这些情况下,这些变化是永久性的吗?
我想调试一些PHP代码,但我想打印日志到屏幕或文件对我来说很好.
我应该如何在PHP代码中打印日志?
通常print/ printf似乎转到HTML输出而不是控制台.
我有Apache服务器执行PHP代码.
在Java中,为什么最佳做法是声明记录器static final?
private static final Logger S_LOGGER
Run Code Online (Sandbox Code Playgroud)