如何让log4j日志只输出错误信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让log4j日志只输出错误信息相关的知识,希望对你有一定的参考价值。

log4j有各种信息,只输出错误信息的话,你在程序里就只调用error级别的就可以了。

修改log4j.properties的日志级别,一般error是肯定要输出的,还有就是警告信息warn:log4j.rootLogger=WARN就可以了。输出的信息是你自己在程序中调用日志记录方法的时候写进去的,如果不想要别的信息就不进行记录就可以了。

log4j怎样控制只输出自己写的代码的日志,不输出框架中的日志:

1、输出两次是因为你的mylog配置有误:

log4j.appender.myLog.Target=System.out,你应该是要改成一个输出到一个文件吧,控制台已经有输出了。

2、类名问题: private static  Logger log = Logger.getLogger("myLog"); 这种写法也可以,你在输出项配置中直接写一个%c或%l试试,应该没有用Ant运行吧,如果是Ant编译的话有一个DEBUG的选项要启用才行。

3、输出指定包的方法直接log4j.logger.包名。你可以通过log4j.rootLogger=OFF来屏蔽其他输出。以下配置屏蔽SSH框架的日志输出:

log4j.logger.org.springframework=OFF  

log4j.logger.org.apache.struts2=OFF  

log4j.logger.com.opensymphony.xwork2=OFF  

log4j.logger.com.ibatis=OFF  

log4j.logger.org.hibernate=OFF

参考技术A 设置输出的等级为错误等级即可,在配置文件可以设置
http://blog.csdn.net/azheng270/article/details/2173430/
参考技术B 您好,希望以下回答能帮助您
1.先看log4j的配置文件:
log4j.rootLogger=INFO,R,Client
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./log/server.log
log4j.appender.R.MaxFileSize=5MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%5p] %d [%XuserName] [%XremoteIp] %m%n
log4j.logger.Client=INFO,Client
log4j.additivity.Client = false
log4j.appender.Client=org.apache.log4j.RollingFileAppender
log4j.appender.Client.File=./log/client.log
log4j.appender.Client.MaxFileSize=5MB
log4j.appender.Client.MaxBackupIndex=10
log4j.appender.Client.layout=org.apache.log4j.PatternLayout
log4j.appender.Client.layout.ConversionPattern=[%5p] %d [%XuserName] [%XremoteIp] %m%n
此日志文件分为两个日志文件.一个是给服务器程序记录日志,另一个是给客户端程序记录日志的.
红色部分是必须要加的.
log4j.additivity.Client = false 确保写入client.log文件信息不重复出现到server.log文件中.
log4j.logger.Client=INFO,Client 确保只对log4j的info信息感兴趣.
2.再看代码的初使化:
//加入log4j支持
static Logger logger =Logger.getLogger("Client");
3.最后运行要记录的类.
如您还有疑问可继续追问。本回答被提问者和网友采纳

OpenGL 着色器无法编译但没有给出错误信息

【中文标题】OpenGL 着色器无法编译但没有给出错误信息【英文标题】:OpenGL shader does not compile but gives no error message 【发布时间】:2020-12-10 17:34:05 【问题描述】:

我正在尝试编写一个使用 OpenGl 加载和编译着色器的函数,但着色器拒绝编译,同时给我一个空(或随机)错误日志。

以下是我的最小示例:

vertexShader = glCreateShader( GL_VERTEX_SHADER );
std::string vertexSource = ShaderLoader::load("vertexShader.vert");
const char * vertexAdress = vertexSource.c_str();
glShaderSource( vertexShader, 1, &vertexAdress, NULL );
int shaderCompiled = GL_FALSE;
char errorLog[512];
glCompileShader(vertexShader);
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &shaderCompiled );
glGetShaderInfoLog(vertexShader, 512, nullptr, &errorLog[0]);
glDeleteShader(vertexShader);

输出shaderCompiled 给出0errorLog 给出一个空字符串或几个随机字符。

函数ShaderLoader::load包含以下代码:

std::string ShaderLoader::load(std::string source) 
    std::string shader;
    std::fstream readFile(source, std::ios::in);
    if (readFile.is_open())
        std::stringstream buffer;
        buffer << readFile.rdbuf();
        shader = buffer.str() + "\0";
     else 
        throw std::runtime_error( "Couldn't load shader file: " + source);
    
    return shader;

它似乎按预期工作。着色器源代码是

#version 330 core
layout (location = 0) in vec3 inVertex;
layout (location = 1) in vec3 inNormal;

out vec3 FragmentPosition;
out vec3 Normal;

uniform mat4 transform;

void main()

    FragmentPosition = vec3(inVertex);
    Normal = mat3(transpose(inverse(transform))) * inNormal;
    gl_Position = transform * vec4( inVertex, 1 );

如何使用实际的错误消息填充errorLog,或者更好的是让着色器进行编译。

【问题讨论】:

这是一个错字。您正在使用 2 个不同的变量 vertexShadershader 感谢您指出这一点!然而,不幸的是,它在更改变量名后做同样的事情。我已经更新了问题。 抱歉问题不可重现。代码工作正常。着色器代码正确,可以编译成功。 你检查glError吗?因为shaderCompiled 只有在没有错误发生时才会被改变。您将其初始化为 false,因此在您检查它之前它可能根本没有被更改。正如 Rabbid76 已经说过的:着色器对我来说编译得很好。 我的其余代码中一定有一些奇怪的地方。不幸的是,glError 返回GL_NO_ERROR,所以我还是一头雾水。不管怎样,非常感谢您的意见。 【参考方案1】:

首先仅在 shaderCompiled 为 false 时使用错误记录,这样您就不会得到随机字符串,

  glGetShaderiv(VS, GL_COMPILE_STATUS, &shaderCompiled);
  if (!shaderCompiled)
  
    //error
    GLchar InfoLog[256];
    glGetShaderInfoLog(vertexShader, sizeof(InfoLog), NULL, InfoLog);

其次,您是否真的在链接和使用着色器,问题可能不在于编译:

  // after compilation
  GLuint shaderProgram = glCreateProgram();
  glAttachShader(shaderProgram, vertexShader);
  glLinkProgram(shaderProgram);
  glDetachShader(shaderProgram, vertexShader);
  glDeleteShader(vertexShader);
  glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);

【讨论】:

以上是关于如何让log4j日志只输出错误信息的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 如何只输出错误信息?

web.xml配置错误页面,及输出错误信息

为什么暂时性死区代码执行输出错误信息不是x is not defined?

SQL注入

Linux nohup不输出日志文件的方法

封装表单自定义错误信息。(阻止默认错误信息提示,添加自定义错误信息提示)