我在 AWS 上运行 Lamba,并使用 slf4j 进行日志记录
项目要求的一部分是可以在运行时设置日志级别,使用环境变量,但我不确定这是否可能
我正在使用以下代码,但将 UI 中的环境变量“LOG_LEVEL”更改为“DEBUG”对添加到 CloudWatch 日志的内容没有影响。这可能吗?
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyLambdaHandler implements RequestHandler<Integer, String> {
private static final Logger LOGGER = LoggerFactory.getLogger(MyLambdaHandler.class);
static {
org.apache.log4j.Logger rootLogger = LogManager.getRootLogger();
String logLevel = (System.getenv("LOG_LEVEL") != null) ? System.getenv("LOG_LEVEL") : "INFO";
rootLogger.setLevel(Level.toLevel(logLevel));
}
public String myHandler(int myCount, Context context) {
LOGGER.debug("Entering myHandler lambda handler";
LOGGER.info("Handling myCount {}", myCount);
int returnValue = myCount * 2;
LOGGER.debug("MyHandler return value {}", returnValue);
return returnValue; …
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用了许多库,我正在使用它们java.util.logging
进行日志记录 我希望能够通过以下方式为每个库设置不同的日志记录级别:
org.datanucleus.*.level = WARNING
com.google.apphosting.*.level = WARNING
com.myapp.*.level = FINE
Run Code Online (Sandbox Code Playgroud)
有可能吗?
I have a problem with test console output in IntelliJ 2016. When I run JUnit tests via IntelliJ, the console window is flooded with enormous amounts of log lines, for example
DEBUG reactor.ipc ....
DEBUG io.netty.buffer.ByteBufUtil ....
Run Code Online (Sandbox Code Playgroud)
It's a simple Spring-Boot application which uses the default logging - I think it's slf4j. I tried setting
logging.level.reactor.ipc=WARN
Run Code Online (Sandbox Code Playgroud)
in my src/main/resources/application.properties
and also setting
-Dlogging.level.root=WARN
on the RunConfig's VM arguments, but neither has any effect on the log output.
What is the …
方法退出/输入应该使用什么日志级别?
The log4j levels follow the following order.
DEBUG
INFO
WARN
ERROR
FATAL
Run Code Online (Sandbox Code Playgroud) 我正在使用log4j对我的一个应用程序进行一些日志记录。我的配置中的记录器看起来像这样。
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
<Logger name="org.eclipse.jetty.server.Server" level="warn" additivity="false">
<AppenderRef ref="Console"></AppenderRef>
</Logger>
<Logger name="org.eclipse.jetty.util.log" level="warn" additivity="false">
<AppenderRef ref="Console"></AppenderRef>
</Logger>
<Logger name="org.eclipse.jetty.server.ServerConnector" level="warn" additivity="false">
<AppenderRef ref="Console"></AppenderRef>
</Logger>
Run Code Online (Sandbox Code Playgroud)
基本上,我希望从我编写的代码中获得“信息”级消息,但是我希望外部库仅在警告或更严重的情况下记录日志。
正如我所料,这正在工作,但是“ org.eclipse.jetty”下有很多类
有可能做这样的事情吗?
<Logger name="org.eclipse.jetty.*" level="warn">
<AppenderRef ref="Console" level="warn"></AppenderRef>
</Logger>
Run Code Online (Sandbox Code Playgroud)
也就是说,我希望整个程序包中的所有内容仅发出警告/错误/致命信息。
我尝试了上面,但没有效果。是否有“通配符”或我可以用来为软件包中的所有内容设置记录器的东西?
在我的程序中,我在开头定义了一个类似于此的记录器:
def start_logger():
fh = logging.handlers.RotatingFileHandler('logger.log',
maxBytes=1000000,
backupCount=100)
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
fh_fmt = '%(asctime)s %(levelname)8s %(message)s [%(filename)s:%(lineno)d]'
#fh_fmt = '%(asctime)s - %(funcName)s - %(levelname)s - %(message)s'
ch_fmt = '%(asctime)s %(levelname)8s %(message)s [%(filename)s:%(lineno)d]'
#ch_fmt = '%(funcName)s - %(levelname)s - %(message)s'
fh.setFormatter(logging.Formatter(fh_fmt))
ch.setFormatter(logging.Formatter(ch_fmt))
root = logging.getLogger()
root.addHandler(fh)
root.addHandler(ch)
Run Code Online (Sandbox Code Playgroud)
然后我有多个从我的主程序调用的文件.为了使它们正常工作,我需要执行以下操作:
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
log.debug("This debug message is ounly output when I set the level again to debug for this file. Otherwise the the log level for this file …
Run Code Online (Sandbox Code Playgroud) log.Trace()
我的应用程序在程序的开头有太多的内容,导致程序出现故障,所以我无法使用通用NLog
配置来提高日志级别。
所以,我想提高运行时的日志级别。为此,我在互联网上找到了类似的内容:
foreach (var rule in LogManager.Configuration.LoggingRules)
{
// Iterate over all levels up to and including the target, (re)enabling them.
for (int i = 0; i <= 5; i++)
{
rule.EnableLoggingForLevel(LogLevel.FromOrdinal(i));
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不起作用,因为以下行没有显示在日志中,尽管我确信这一行已经通过:
log.Trace("log trace works!");
Run Code Online (Sandbox Code Playgroud)
有谁知道一种方法来确保从我的源代码中的某个时刻开始,我可以看到log.Trace()
结果?
供你参考:
log
定义为private static readonly Logger log = LogManager.GetCurrentClassLogger();
.nlog.*
包含<nlog>
标签的文件,但没有找到任何内容。编辑:
我正在使用NLog
4.5.4 版本。
Edit2(尝试强制读取配置):
我已修改nlog.config
文件如下:
foreach (var rule in LogManager.Configuration.LoggingRules)
{
// Iterate over all levels …
Run Code Online (Sandbox Code Playgroud) 我想做一些看起来非常简单的事情:只需通过一个简单实用程序类中的方法传递大量日志记录命令(可能是全部,但特别是WARN
和ERROR
级别)。我特别想这样做,以便在测试期间我可以通过模拟执行此调用的方法来抑制实际输出到日志记录。
但是我不知道如何使用ch.qos.logback.classic.Logger
,以Level
为参数调用单个方法......显然我可以使用switch
基于此值的命令,但是在某些日志记录框架中,有一两个方法可以让您通过Level
作为参数记录。不提供这个似乎有点“原始”。
该方法可能看起来有点像这样:
Logger.log( Level level, String msg )
Run Code Online (Sandbox Code Playgroud)
之后
现在查找了“XY 问题”,我理解对这个问题的怀疑。动态日志被认为是不好的,至少在 Java 中是这样(在 Python 中可能更少)……现在我知道并理解首选的方法是适当地配置日志配置以进行测试。
但是,如果可以的话,还有一个小问题:虽然我还没有在这个特定项目中实现这一点,但我通常发现“只是”将堆栈跟踪追溯到特定Thread
不足的开头,这就是 logback 所做的(Exceptions
通过在WARN
或ERROR
水平)。我计划实施一个系统来记录Threads
它们何时运行新的“快照” Threads
......然后可以在Thread
发生错误时列出(回到应用程序的第一个开始)。如果您愿意,这是使用某些东西“处理”传出日志调用的另一个理由。我想如果我想实现这样的东西,我将不得不尝试以某种方式扩展 logback 的一些元素。
我需要在某些代码之前关闭 spdlog 级别,然后将其返回到之前的值。
如何在关闭之前获得当前级别?
我正在将SonarQube插件(版本2.6.1)用于Gradle(版本4.7),并且遇到的问题是,在我的CI服务器上运行声纳分析时,正在编写许多不重要的日志输出。
有没有一种方法可以微调此插件的日志级别?
我检查了文档,但是与找到的日志输出相关的唯一设置是JVM参数“ verbose
”,我没有使用任何一种方法(我猜默认设置是,false
所以不应该为我打开它)。
编辑:这是一些我想摆脱的输出示例:
16:23:34.993 ERROR - Unable to create symbol table for : /opt/workspace/pipeline-1/src/main/java/com/SomeClass.java
java.lang.NullPointerException: null
at org.sonar.java.resolve.TypeAndReferenceSolver.getSymbolOfMemberSelectExpression(TypeAndReferenceSolver.java:232) ~[java-squid-2.5.1.jar:na]
at org.sonar.java.resolve.TypeAndReferenceSolver.resolveAs(TypeAndReferenceSolver.java:200) ~[java-squid-2.5.1.jar:na]
at org.sonar.java.resolve.TypeAndReferenceSolver.resolveAs(TypeAndReferenceSolver.java:182) ~[java-squid-2.5.1.jar:na]
at...
Run Code Online (Sandbox Code Playgroud)
16:23:37.206 ERROR - Fail to execute PMD. Following file is ignored: /opt/workspace/pipeline-1/src/main/java/com/SomeClass.java
java.lang.RuntimeException: null
at org.objectweb.asm.MethodVisitor.visitParameter(Unknown Source) ~[asm-5.0.3.jar:5.0.3]
at org.objectweb.asm.ClassReader.b(Unknown Source) ~[asm-5.0.3.jar:5.0.3]
at org.objectweb.asm.ClassReader.accept(Unknown Source) ~[asm-5.0.3.jar:5.0.3]
at org.objectweb.asm.ClassReader.accept(Unknown Source) ~[asm-5.0.3.jar:5.0.3]
at net.sourceforge.pmd.lang.java.typeresolution.PMDASMClassLoader.getImportedClasses(PMDASMClassLoader.java:77) ~[pmd-java-5.2.1.jar:na]...
Run Code Online (Sandbox Code Playgroud)
16:23:38.638 WARN - /opt/workspace/pipeline-1/src/main/java/com/SomeClass.java: Got …
Run Code Online (Sandbox Code Playgroud)