Vô hiệu hóa đăng nhập httpClient


133

Tôi đang sử dụng commons-httpclient 3.1 trong bộ kiểm tra tích hợp. Việc ghi nhật ký mặc định cho HttpClient cực kỳ ồn ào và dường như tôi không thể tắt nó. Tôi đã thử làm theo hướng dẫn ở đây nhưng không ai trong số họ tạo ra sự khác biệt.

Hầu như tôi chỉ cần làm cho trình ghi nhật ký org.apache.http.wire im lặng. Một phần của vấn đề là tôi không biết loại logger nào mà httpClient đang cố sử dụng và hầu hết vấn đề là tôi chưa bao giờ sử dụng thư viện này trước đây. Tôi đã thử tạo tệp log4j.properIES và thả nó vào thư mục thử nghiệm / tài nguyên của mình, sửa đổi tệp log.properations chính trong jre / lib và gửi các tùy chọn ghi nhật ký khác nhau đến Maven như được chỉ định trên trang ghi nhật ký và không ai trong số chúng làm cho bất kỳ sự khác biệt.

Bất kỳ trợ giúp đều được đánh giá cao ... điều này đang khiến tôi phát điên.

CẬP NHẬT: Một sự điều chỉnh: có vẻ như đầu ra trong câu hỏi thực sự bắt nguồn thông qua việc sử dụng httpClient của jwebunit, chứ không phải của riêng tôi. Dù bằng cách nào, nó không được mong muốn.

CẬP NHẬT: Cảm ơn những nỗ lực cho đến nay. Tôi đã thử mọi cách được đề xuất dưới đây nhưng vẫn không gặp may. Tôi có một tệp commons-logging.properies trong thư mục src / test / resource của tôi với các nội dung sau

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
log4j.configuration=log4j.properties

và một tệp log4j.properies trong cùng một thư mục với các nội dung sau

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

Tuy nhiên, khi tôi chạy thử nghiệm, tôi vẫn nhận được một loạt đầu ra như thế này:

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 org.apache.http.wire - << "[\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                   </div>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "                </li>[\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.425 [main] DEBUG org.apache.http.wire - << "            [\r][\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "        </ul>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.433 [main] DEBUG org.apache.http.wire - << "<div class="details">[\n]"
21:57:41.442 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-body details-precis  ">[\n]
"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "<div class="details-state">[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.443 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "</div>[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\n]"
21:57:41.455 [main] DEBUG org.apache.http.wire - << "[\r][\n]"
Destroying 1 processes21:57:41.465 [main] DEBUG org.apache.http.wire - << "[\r][\n]"

Đầu ra này cho mọi thứ đi qua dây đang khiến thư viện này không thể sử dụng được cho tôi ... đó là cho đến khi tôi có thể tìm ra cách tắt nó. Có điều gì đặc biệt tôi cần phải làm để đọc cấu hình nhật ký này không?


Đối với tất cả các vấn đề gặp phải: đảm bảo thêm -Dlog4j.debugvào các tùy chọn VM của bạn để đảm bảo rằng tệp cấu hình phù hợp đã được tải
Tommy

3
Xem stackoverflow.com/questions/1436761/ . Trích đoạn: public class Main { static { System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); } // Rest of class as before }
PVS


3
Đã làm điều này bao giờ được giải quyết cho OP. Vấn đề chính xác này đang giết chết tôi.
Collin Bell

2
Điều này đã được giải quyết chưa? Đã thử phân bổ các câu trả lời, không có may mắn.
Markvds

Câu trả lời:


85

Cập nhật log4j.propertiesđể bao gồm:

log4j.logger.httpclient.wire.header=WARN
log4j.logger.httpclient.wire.content=WARN

Lưu ý rằng nếu thư viện Log4j chưa được cài đặt, HttpClient (và do đó JWebUnit) sẽ sử dụng logback. Trong tình huống này, tạo hoặc chỉnh sửa logback.xmlđể bao gồm:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

Đặt mức nhật ký thành WARNvới Log4j bằng tên gói org.apache.commons.httpclienttrong log4j.properties sẽ không hoạt động như mong đợi:

log4j.logger.org.apache.commons.httpclient=WARN

Điều này là do nguồn cho HttpClient (v3.1) sử dụng các tên nhật ký sau:

public static Wire HEADER_WIRE = new Wire(LogFactory.getLog("httpclient.wire.header"));
public static Wire CONTENT_WIRE = new Wire(LogFactory.getLog("httpclient.wire.content"));

19
Trong nguồn 4.2.1, tên nhật ký là: "org.apache.http.headers" và "org.apache.http.wire", mặc dù ngay cả khi sử dụng chúng, việc ghi nhật ký apache ồn ào dường như sẽ không tắt đối với tôi .
Tinclon

Cảm ơn bạn!!! Ngoài ra: Nếu bạn gặp vấn đề này ở đâu đó trong mã của riêng bạn, nơi bạn sử dụng httpclient và chưa sử dụng Log4j: Cũng nhớ bao gồm tệp log4j trong đường dẫn lớp ...
FelixD

30

Lưu ý: Một số câu trả lời này có thể lặp lại những điều bạn đã biết (hoặc nghĩ rằng bạn biết), nhưng có một chút thông tin sai lệch xung quanh câu hỏi này, vì vậy tôi sẽ bắt đầu từ đầu và đánh vần tất cả

  • Commons HttpClient sử dụng Commons-Logging cho tất cả các nhu cầu ghi nhật ký của nó.
  • Ghi nhật ký chung không phải là một khung ghi nhật ký đầy đủ, mà là một trình bao bọc xung quanh một số khung ghi nhật ký hiện có
  • Điều đó có nghĩa là khi bạn muốn kiểm soát đầu ra ghi nhật ký, bạn (hầu hết) sẽ cấu hình một thư viện không phải là Ghi nhật ký chung, nhưng vì Ghi nhật ký chung bao quanh một số thư viện khác, chúng tôi khó đoán được cấu hình nào mà không biết thiết lập chính xác của bạn.
  • Ghi nhật ký Commons có thể đăng nhập vào log4j, nhưng nó cũng có thể đăng nhập java.util.logging(ghi nhật ký JDK1.4)
  • Ghi nhật ký chung cố gắng trở nên thông minh và đoán xem bạn đang sử dụng khung ghi nhật ký nào và gửi nhật ký của nó tới đó.
  • Nếu bạn chưa có khung ghi nhật ký và đang chạy trên JRE từ 1,4 trở lên (mà bạn thực sự cần phải có) thì có lẽ nó sẽ gửi thông điệp nhật ký của nó tới nhật ký JDK ( java.util.logging)
  • Dựa vào cơ chế tự động phát hiện của Commons-Logging dễ bị lỗi. Chỉ cần thêm log4j.jarvào đường dẫn lớp sẽ khiến nó chuyển đổi cơ chế ghi nhật ký mà nó sử dụng, có lẽ không phải là điều bạn muốn
  • Bạn nên thông báo rõ ràng cho Commons-Logging thư viện ghi nhật ký nào sẽ sử dụng
  • Bạn có thể làm điều này bằng cách tạo một commons-logging.propertiestệp theo các hướng dẫn sau
  • Các bước bạn muốn làm theo để định cấu hình ghi nhật ký commons-httpclient là
    1. Quyết định khung đăng nhập cơ bản nào bạn muốn sử dụng. Có một số lựa chọn, nhưng có lẽ log4jhoặc java.util.logginglà những lựa chọn tốt nhất cho bạn.
    2. Thiết lập tệp thuộc tính đăng nhập chung để chỉ ra cách Logthực hiện chính xác . ví dụ: để sử dụng log4j, hãy đặt tệp này vào tệp thuộc tính: org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggerhoặc để sử dụng bộ ghi nhật ký JDK org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger. Chúng cũng có thể được đặt làm thuộc tính hệ thống (ví dụ: sử dụng -Dtrên dòng lệnh).
    3. Định cấu hình triển khai ghi nhật ký cơ bản (ví dụ log4j) để bỏ qua các tin nhắn bạn không muốn và xuất các tin nhắn bạn muốn.

Đó là rất nhiều bước, nhưng đó là những gì nó cần. Các nhà phát triển tại Apache-commons có xu hướng cho rằng bạn đã có khung đăng nhập được định cấu hình và họ có thể tìm ra cái nào bằng cách tự động khám phá.
Nếu điều đó không đúng với bạn, thì có xu hướng làm việc nhiều hơn một chút để mọi thứ hoạt động.


1
Đây là thông tin rất hữu ích; Tôi thực sự cảm thấy như nó nên được thêm vào trang này . Bạn đã viết nó chỉ cho điều này?
nHR345

1
Man, câu trả lời này là tuyệt vời, nhưng tôi đã thất bại để làm cho nó hoạt động. Tôi đang sử dụng Dropwizard và tôi đã thử mọi cách bạn đề cập, nhưng không có kết quả: '(
Vic Seedoubleyew

19

Tôi đặt nó vào tập tin cấu hình log4j của tôi

log4j.logger.org.apache.http.wire=WARN

Điều này giới hạn đầu ra ở mức Cảnh báo trở lên


19

Điều này làm việc cho các bài kiểm tra của tôi;

java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "ERROR");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "ERROR");

18

Đối với log4j, thêm phần sau vào log4j.properties(trong sourcethư mục của ứng dụng ):

log4j.logger.org.apache=WARN
log4j.logger.httpclient=WARN

Để đăng nhập lại, phần sau logback.xmlsẽ tắt tiếng ồn:

<configuration>
    <logger name="org.apache" level="WARN" />
    <logger name="httpclient" level="WARN" /> 
</configuration>

1
Tôi đang sử dụng log4j. Thêm hai dòng đầu tiên trong bản ghi giải quyết vấn đề của tôi hoàn toàn. Tất cả các thông điệp tường trình khác của tôi xuất hiện theo cấp độ tôi đặt. Trong khi nhật ký apache không. Giúp đỡ nhiều. Cảm ơn.
Arun Thundyill Saseendran

Nó có thể sẽ thay đổi tùy theo tình huống của bạn, nhưng để vô hiệu hóa tính năng ghi nhật ký chi tiết khủng khiếp được bật ra khỏi hộp với AWS SDK, đây là cách duy nhất hoạt động.
Matt Baker

11

Phải mất quá nhiều thời gian để tìm ra điều này, nhưng JWebUnit đi kèm với thành phần ghi nhật ký Logback , do đó, nó thậm chí sẽ không sử dụng log4j.propertieshoặc commons-logging.properties.

Thay vào đó, hãy tạo một tệp được gọi logback.xmlvà đặt nó vào thư mục mã nguồn của bạn (trong trường hợp của tôi, src):

<configuration debug="false">
  <!-- definition of appender STDOUT -->
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
  </appender>

  <root level="ERROR">
    <!-- appender referenced after it is defined -->
    <appender-ref ref="STDOUT"/>
  </root> 
</configuration>

Logback dường như vẫn đang được phát triển và API dường như vẫn đang thay đổi, vì vậy mẫu mã này có thể thất bại trong tương lai. Xem thêm câu hỏi StackOverflow này .


1
Bạn đẹp. Tôi gần như đã giết một con mèo vì điều này. Nó làm tôi phát điên.
Manish Patel

Đây là giải pháp cho tôi. Tôi nghĩ rằng bởi vì các thư viện khác mà tôi đã bao gồm quá trình logback, vì vậy nó đã bị khóa trên logger này.
Nathan

10

Tôi gặp vấn đề này khi sử dụng RestAssured với JUnit. Đối với tôi phương pháp lập trình này có hiệu quả:

@BeforeClass
public static void setUpClass() {
    ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger("org.apache.http");
    root.setLevel(ch.qos.logback.classic.Level.INFO);

    //...
}

2
Tuyệt vời, giải pháp duy nhất nó làm việc cho tôi. Cám ơn rất nhiều.
lasote

Cảm ơn bạn! Đã sử dụng cùng một mã chính xác khi bắt đầu phương thức thử nghiệm, không làm gì cả. Đặt nó trong chính nó @Beforehoặc @BeforeClasschức năng làm việc đẹp.
ExactaBox

8

Chúng tôi sử dụng XML, chứ không phải là tệp thuộc tính, để định cấu hình đầu ra ghi nhật ký của chúng tôi. Các mã sau đây làm việc để im lặng cuộc trò chuyện này.

<logger name="org.apache.commons.httpclient">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.header">
    <level value="fatal"/>
</logger>

<logger name="httpclient.wire.content">
    <level value="fatal"/>
</logger>

4

Trong log4.properies của bạn - bạn có bộ này như tôi làm dưới đây và không có org.apache.httpbộ ghi nhật ký nào khác được đặt trong tệp không?

-org.apache.commons.logging.simplelog.log.org.apache.http=ERROR

Ngoài ra nếu bạn không có bất kỳ cấp độ nhật ký nào được chỉ định org.apache.httptrong tệp thuộc tính log4j thì nó sẽ kế thừa log4j.rootLoggercấp độ đó. Vì vậy, nếu bạn đã log4j.rootLoggerđặt thành giả sử LRI và đưa ra org.apache.httpcác cài đặt trong log4j.properations của bạn, điều đó sẽ khiến nó chỉ ghi nhật ký ERRORtin nhắn chỉ bằng cách thừa kế.

CẬP NHẬT:

Tạo một commons-logging.propertiestập tin và thêm dòng sau vào nó. Ngoài ra, hãy chắc chắn rằng tập tin này nằm trong CLASSPATH của bạn.

org.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.Log4jFactory

Đã thêm một tệp log4j hoàn thành và mã để gọi nó cho OP. Log4j.properies này phải có trong CLASSPATH của bạn. Tôi đang giả định stdout cho thời điểm này.

log4j.configuration=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

log4j.logger.org.apache.http=ERROR

Đây là một số mã mà bạn cần thêm vào lớp của mình để gọi logger.

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class MyClazz
{
    private Log log = LogFactory.getLog(MyClazz.class);
    //your code for the class
}

Tôi không có nhu cầu về tệp log4j.properIES trước khi thử sử dụng HttpClient. Tôi đã thử đặt các dòng của bạn trong tệp src / test / resource / log4j.properIES nhưng nó không tạo ra sự khác biệt nào. Có đúng không khi đặt các tùy chọn commons.logging trong log4j.properies?
Matt Baker

Yeah commons-log chỉ là một trình bao bọc xung quanh log4j. Làm thế nào để bạn gọi logger trong lớp thử nghiệm của bạn?
CoolBeans

(Sau khi cập nhật của bạn) Tôi đã thực hiện nó để dòng trên là dòng duy nhất trong tệp log4j.properIES của tôi và nó vẫn phun ra mọi thứ.
Matt Baker

1
Tôi không gọi logger, HTTPClient tự làm điều đó.
Matt Baker

Nó nói trên liên kết mà bạn cung cấp rằng - "Lưu ý: Log4j không được bao gồm trong bản phân phối HttpClient." Vì vậy, bạn chắc chắn cần phải thêm nó vào CLASSPATH của bạn. Bạn có thấy đầu ra trong thiết bị xuất chuẩn (bảng điều khiển) hoặc trong tệp nhật ký không? Tôi sẽ tạo một tệp log4h mẫu với mã để gọi nó cho bạn.
CoolBeans

4

Cách đơn giản Log4j và HttpCLient (v3.1 trong trường hợp này, nên hoạt động cao hơn, có thể yêu cầu thay đổi nhỏ)

Hãy chắc chắn rằng tất cả các phụ thuộc là chính xác và MD5 tải xuống của bạn !!!!

import org.apache.commons.httpclient.HttpClient;  
import org.apache.log4j.Level;  
import org.apache.log4j.Logger;  

---

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.header").setLevel(Level.WARN);
Logger.getLogger("httpclient.wire.content").setLevel(Level.WARN);

HttpClient client = new HttpClient();

Tôi có nên đặt nó trong mainphương pháp?
phân tích cú pháp

@parsecer bạn có thể
WiR3D

4

Tôi đã bị vướng vào vấn đề tương tự trong một thời gian khá lâu và cuối cùng đã quyết định xem xét vấn đề này. Hóa ra vấn đề là dự án của tôi có sự phụ thuộc vào http-builder-0.5.2.jar, gói một tệp log4j.xml trong chính nó. Và chắc chắn, mức độ nhật ký cho org.apache.http.wire là DEBUG! Cách tôi tìm thấy nó chỉ là để đi qua tất cả các tệp jar trong phần phụ thuộc của tôi và thực hiện "jar tvf" và grepping cho log4j.

Mặc dù phát hiện này đã dẫn đến giải pháp cuối cùng là nâng phiên bản phụ thuộc trình xây dựng http của tôi lên 0,6, nhưng nó vẫn gây trở ngại cho tôi những gì phải trải qua trong tâm trí của nhà phát triển khi đưa tệp log4j.xml vào tệp jar. Dù sao, điều đó có lẽ không liên quan đến chủ đề này cho đến bây giờ. Nhưng tôi thấy thật hữu ích khi đề cập đến giải pháp này, tôi thấy rằng khi tôi đang tìm kiếm một giải pháp trước đây, tôi không bao giờ nghĩ ra. Hy vọng ai đó sẽ tìm thấy điều này hữu ích.


Vấn đề tương tự trong khi sử dụng <!-- https://mvnrepository.com/artifact/com.fredericboisguerin.excel/excel-reader-writer --> <dependency> <groupId>com.fredericboisguerin.excel</groupId> <artifactId>excel-reader-writer</artifactId> <version>2.1</version> </dependency>. Loại bỏ sự phụ thuộc và nhật ký đã biến mất. Cảm ơn bạn!
adom

3

Tôi đã có cùng một vấn đề với JWebUnit. Xin lưu ý rằng nếu bạn sử dụng phân phối nhị phân thì Logback là một logger mặc định. Để sử dụng log4j với JWebUnit, tôi đã thực hiện các bước sau:

  • loại bỏ lọ Logback
  • thêm thư viện cầu lod4j cho sfl4j - slf4j-log4j12-1.6.4.jar
  • thêm log4j.properies

Có lẽ bạn không phải xóa bình Logback nhưng bạn sẽ cần thêm một số bước để buộc slf4j sử dụng log4j


Cảm ơn, tôi đã gặp vấn đề tương tự khi sử dụng OpenRdf. Tất cả các mẹo khác trong chủ đề này dường như không có tác dụng cho đến khi tôi gỡ bỏ các lọ logback, bây giờ nhật ký khá yên tĩnh.
amarillion

3

2 dòng sau đã giải quyết hoàn toàn vấn đề của tôi:

Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
Logger.getLogger("httpclient").setLevel(Level.ERROR);

Điều này cũng có hiệu quả với tôi, nhưng tôi không cần: Logger.getLogger ("org.apache.commons.httpclient"). SetLevel (Level.ERROR);
Jamel Toms

3

Thêm các dòng dưới đây vào tệp thuộc tính log4j và nó sẽ đóng nhật ký http: - log4j.logger.org.apache.http = OFF


trong các bài kiểm tra đơn vị (nếu chính, sau đó là chính) cũng thêm @BeforeClass public static void BeforeClass() { PropertyConfigurator.configure("log4j.properties"); ...}tệp log4j.properIES với dòng đơn log4j.logger.org.apache.http = OFF phải ở trong thư mục gốc (ngay phía trên thư mục src)
Sasha Bond

3

Tôi cũng gặp vấn đề tương tự. Toàn bộ giao diện điều khiển được lấp đầy [main] DEBUG org.apache.http.wiretrong khi chạy thử nghiệm.

Giải pháp hiệu quả với tôi là tạo ra một logback-test.xml src / test / resource / logback-test.xml như trong https://github.com/bonigarcia/webdomanager-examples/blob/master/src/test/resource /logback-test.xml (ref - https://github.com/bonigarcia/webdomanager/issues/203 )

Để xem infos đăng nhập của tôi, tôi đã thay thế tên logger = "io.github.bonigarcia" bằng tên gói của tôi

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.mypackage" level="DEBUG" />
    <logger name="org" level="INFO" />
    <logger name="com" level="INFO" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

2

Tôi đã được dẫn đến bài đăng này khi tìm kiếm giải pháp cho vấn đề tương tự. Câu trả lời của Tim rất hữu ích. Giống như Matt Baker, tôi chỉ muốn tắt nhật ký httpClient mà không cần cấu hình quá nhiều. Vì chúng tôi không chắc chắn việc thực hiện ghi nhật ký nào bên dưới ghi nhật ký chung đã được sử dụng, giải pháp của tôi là buộc nó sử dụng log4j bằng cách ném tệp jar log4j vào đường dẫn lớp. Cài đặt mặc định của cấu hình log4j sẽ tắt đầu ra gỡ lỗi chung-httpclient. Tất nhiên, để làm cho nó mạnh mẽ hơn, bạn có thể tạo các tệp common-logging.properies và log4j.properIES để xác định thêm cấu hình ghi nhật ký của mình.


2

Hãy thử đặt

org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog

trong commons-logging.properies của bạn


2

Đối với apache 4.5.3, nếu bạn muốn di chuyển cấp độ cho tất cả máy khách http apache đăng nhập vào Warn , hãy sử dụng:

log4j.logger.org.apache=WARN

2

nó hoạt động với tôi bằng cách thêm "logback.xml" trong đường dẫn gốc lớp và cài đặt bên dưới.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.apache" level="WARN"/>
    <logger name="httpclient" level="WARN"/>
</configuration>

1

Tôi gặp vấn đề tương tự khi chạy thử nghiệm tích hợp jwebunit. Tôi đã sửa nó bằng cách loại trừ logback và thêm vào slf4j-log4j12, như vậy:

<dependency>
  <groupId>net.sourceforge.jwebunit</groupId>
  <artifactId>jwebunit-htmlunit-plugin</artifactId>
  <version>3.0</version>
  <exclusions>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

1

Điều này khiến tôi mất nhiều thời gian để tìm ra một lần, bạn cần điều này:

log4j.logger.httpclient.wire=ERROR

Tôi đoán rằng httpClient sử dụng "httpclient.wire" làm tên logger của nó chứ không phải "org.apache.commons.httpclient".

Lén lút


1

Điều này làm việc cho tôi.

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http", "error");
System.setProperty("log4j.logger.org.apache.http.wire", "error");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "error");

0

Giải pháp tốt nhất tôi tìm thấy là sử dụng plugin thực thi maven để ngăn chặn việc đăng nhập chung được sử dụng hoàn toàn. Sau đó, tôi đã thêm phụ thuộc slf4j để đăng nhập thay thế. Vì vậy, hãy thêm phần sau vào tệp pom.xml của bạn

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>[your version here]</version>
    </dependency>

và cũng thêm plugin maven-thi hành

<plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-enforcer-plugin</artifactId>
           <version>[your version here]</version>
           <executions>
               <execution>
                   <id>enforce</id>
                   <configuration>
                       <rules>
                           <DependencyConvergence />
                           <bannedDependencies>
                               <excludes>
                                   <exclude>commons-logging:commons-logging</exclude>
                               </excludes>
                           </bannedDependencies>
                       </rules>
                   </configuration>
                   <goals>
                       <goal>enforce</goal>
                   </goals>
               </execution>
           </executions>
       </plugin>

Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M2:enforce (enforce) on project gs-serving-web-content: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed
phân tích cú pháp

0

Tôi đã gặp vấn đề như vậy sau khi thiết lập HttpComponentsClientHttpRequestFactory cho mẫu nghỉ ngơi của tôi.

Đặt OkHttpClientHttpRequestFactory sẽ giải quyết vấn đề với việc ghi nhật ký rác.


0

Đơn giản chỉ cần thêm hai phụ thuộc này vào tệp pom: Tôi đã thử và thành công sau khi thử thảo luận trước đó.

<!--Using logback-->
<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

Commons-Logging -> Logback và Thông tin mặc định trong khi Debug sẽ không xuất hiện; Bạn có thể dùng:

private static Logger log = LoggerFactory.getLogger(HuaweiAPI.class);

để xác định thông tin bạn muốn đăng nhập: như Kết quả cuối cùng như thế này. Chỉ có thông tin tôi muốn đăng nhập sẽ có mặt.


0

Tôi đã thử tất cả các giải pháp trên nhưng không có kết quả. Người duy nhất đến gần tôi nhất là người gợi ý tạo logback.xml. Điều đó đã làm việc, tuy nhiên không có gì đã đăng nhập. Sau khi chơi xung quanh với logback.xml, đây là những gì tôi đã kết thúc với

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <withJansi>true</withJansi>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

Bây giờ Tất cả các cấp dưới DEBUG được ghi lại chính xác.


0

Với:

  • Log2J 2 2.11.2
  • HttpClient 4.5.7 (ứng dụng khách còn lại 7.0.0)
  • Sử dụng tệp thuộc tính để cấu hình

Người ta có thể thêm:

logger.httpclient.name=org.apache.http
logger.httpclient.level=info

Với 'httpclient' trong ví dụ trên là tên logic bạn chọn.

(Đã thử nghiệm trên ứng dụng Java Java OpenFX.)


0

Trong trường hợp của tôi, tôi sử dụng cấu hình xml và tôi thêm nó vào tệp cấu hình

<logger name="org.apache.http">
    <level value="warn"/>
</logger>


0

Đối với tôi, các dòng dưới đây trong tệp prop4j đã dọn sạch tất cả những mớ hỗn độn xuất phát từ việc ghi nhật ký httpClient ... Hurrah !!! :)

log4j.logger.org.apache.http.headers=ERROR
log4j.logger.org.apache.http.wire=ERROR
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultManagedHttpClientConnection=ERROR
log4j.logger.org.apache.http.conn.ssl.SSLConnectionSocketFactory=ERROR
log4j.logger.org.springframework.web.client.RestTemplate=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAddCookies=ERROR
log4j.logger.org.apache.http.client.protocol.RequestAuthCache=ERROR
log4j.logger.org.apache.http.impl.execchain.MainClientExec=ERROR
log4j.logger.org.apache.http.impl.conn.DefaultHttpClientConnectionOperator=ERROR
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.