我有一个简单的控制台应用程序,它使用apache的PDFBox库,后者又使用commons日志记录。我在我的控制台中收到了很多垃圾邮件,我想压制它们:
2011年2月15日下午3:56:40 org.apache.pdfbox.util.PDFStreamEngine processOperator 信息:不支持/禁用操作:EI
在我的代码中,我试图重置日志级别无效:
Logger.getLogger("org.apache.pdfbox.util.PDFStreamEngine").setLevel(Level.OFF);
Logger.getLogger("org.apache.pdfbox.util").setLevel(Level.OFF);
Logger.getLogger("org.apache.pdfbox").setLevel(Level.OFF);
尽管有这些设置,但消息仍会显示在控制台上。从Commons日志记录中检索日志对象也没有帮助,因为它似乎没有办法设置级别。
有没有办法以编程方式抑制这些消息?或者我是否需要添加配置文件?
答案 0 :(得分:5)
Commons-logging只是一个logging-facade,这意味着它不提供实际将logdata写入例如磁盘的代码。您需要更改的是实际日志记录实现的配置(例如logback
,log4j
,sl4fj
等)。如果未找到此类库,则默认为java.util.logging
。
我建议在类路径中添加例如log4j,并在类路径中添加log4j.xml配置文件。在这种情况下,类路径中仅存在log4j
足以初始化它。 Log4j也可以配置为programmatically。
答案 1 :(得分:2)
这对我有用:
String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine",
"org.apache.pdfbox.pdmodel.font.PDSimpleFont" };
for (String logger : loggers) {
org.apache.log4j.Logger logpdfengine = org.apache.log4j.Logger
.getLogger(logger);
logpdfengine.setLevel(org.apache.log4j.Level.OFF);
}
答案 2 :(得分:1)
Apache commons-logging使用下面的一些其他日志框架(java.util.logging
或Log4J),您必须调查它在项目中使用哪一个并在那里设置正确的日志记录级别。
答案 3 :(得分:1)
如果您没有时间弄清楚Apache commons-logging在下面使用哪个Logging实现,请尝试禁用类路径中的所有实现。下面的代码测试了三个实现。
如果任何行没有编译,请不要添加依赖项!只需删除该行。
//
`timescale 1ns / 1ps
//Moore Finite State Machine Lab 3
//
// WORKING, needs Screen output
module moore(
input BTNC, //manual clk
input SW0, //clr
input SW1,
input SW2,
input SW3,
input SW4,
output reg [3:0] LED, //z
reg [2:0] y,Y
);
localparam S_00=3'b000, S_01=3'b001, S_02=3'b010,
S_03=3'b011, S_04=3'b100;
//Define next state
always @(y,SW0,SW1,SW2,SW3,SW4)
begin
case (y)
S_00: if (SW1) Y <= S_01;
else Y <= S_00;
S_01: if (SW1) Y <= S_02;
else if (SW3) Y <= S_03;
else Y <= S_01;
S_02: if (SW1) Y <= S_04;
else Y <= S_02;
S_03: if (SW2) Y <= S_04;
else if (SW3) Y <= S_02;
else Y <= S_03;
S_04: if (SW2) Y <= S_02;
else if (SW4) Y <= S_00;
else Y <= S_04;
default: Y <= 3'bxxx;
endcase
end
//Define state update
always @(SW0, BTNC)
begin
if (!SW0) y <= S_00;
else y <= Y;
end
//Define output
always @(y)
if (y==S_00)
begin
assign LED = 3'b000;
end
else if (y==S_01)
begin
assign LED = 3'b001;
end
else if (y==S_02)
begin
assign LED = 3'b010;
end
else if (y==S_03)
begin
assign LED = 3'b011;
end
else if (y==S_04)
begin
assign LED = 3'b100;
end
else
begin
assign LED = 3'b000; //not used
end
endmodule // lab3ht codename moore