2012-10-01 16 views
8

AppEngine sử dụng Tháng Bảy cho khai thác gỗ của nó và tôi đã cấu hình file logging.properties và tài liệu tham khảo để rằng trong appengine-web.xmlLàm thế nào tôi có thể thay đổi định dạng đăng nhập vào Google AppEngine

Vấn đề là định dạng mà AppEngine trình bày dữ liệu trong nhật ký bảng điều khiển bị cắt ngắn sau khoảng 180 ký tự trên mỗi dòng nhật ký. Và kể từ khi một phần lớn trong đó được đưa lên với phương pháp và tên lớp (bao gồm cả gói) và ngày không có nhiều thông điệp tường trình thực tế xuất hiện.

Tôi đã cố gắng định cấu hình Trình định dạng của riêng mình, cả hai chương trình và thông qua logging.properties mà không có may mắn.

Tôi nhận ra rằng tôi có thể đẩy tất cả nhật ký của mình thông qua slf4j, logback hoặc log4j nhưng tôi tin rằng làm như vậy khiến tất cả các nhật ký như vậy xuất hiện dưới dạng stdout trong bảng điều khiển nhật ký AppEngine có kiểu verbosity riêng.

Có cách nào để xác định định dạng cụ thể cho nhật ký AppEngine không và nếu có thì làm cách nào? t sẽ là đủ nếu mỗi dòng đăng nhập không bị cắt xén thành 180 ký tự.

+1

Tôi đang gặp vấn đề tương tự. Tôi đã tạo một Formatter tùy chỉnh, và chỉ rõ nó trong logging.properties của tôi, nhưng nó có vẻ hoàn toàn bị bỏ qua bởi appengine. Tôi khá chắc chắn tập tin logging.properties của tôi đang được chọn vì thay đổi mức độ đăng nhập không hoạt động. – sappenin

+0

Câu hỏi hay, nhưng tôi nghĩ tóm tắt là gây hiểu nhầm: vấn đề là các dòng nhật ký được hiển thị trong bảng điều khiển của công cụ ứng dụng bị cắt bớt. – Tom

Trả lời

0

Sau khi tìm hiểu sâu hơn một chút, tôi không thể có được Trình xử lý hoặc Trình định dạng JUL tùy chỉnh để nhận thời gian chạy appengine. Vì vậy, thay vào đó, tôi đã tạo ra một ServletContextListener để khởi tạo logger gốc với định dạng tùy chỉnh của riêng tôi, như sau:

<listener> 
    <listener-class>MyLoggingListener</listener-class> 
</listener> 

Dưới đây là một ServletContextListener mẫu:

public class MyLoggingListener implements ServletContextListener 
{ 
    private static Logger LOG; 

    @Override 
    public void contextInitialized(ServletContextEvent sce) 
    { 
     LOG = Logger.getLogger(""); 
     Handler[] handlers = LOG.getHandlers(); 
     for (Handler handler : handlers) 
     { 
      handler.setFormatter(new MyLogFormatter()); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) 
    {} 
} 

Cập nhật: Đoạn mã trên làm việc tại Môi trường Dev, nhưng dường như bị bỏ qua trên Appengine. Quay lại bảng vẽ trên cái này.

2

Bạn đã thử sử dụng tính năng tải xuống nhật ký: Nó không cắt bớt nhật ký, bạn có thể xem mọi thứ và có thể chỉ định số ngày và mức độ nghiêm trọng của các mục nhập nhật ký cần tải xuống.

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT 

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log> 

Đó là cách duy nhất tôi thấy có thể xem chi tiết nhật ký của mình. Mức nhật ký mặc định là INFO, vì vậy bạn thực sự phải sử dụng các đối số mức độ nghiêm trọng và num_days để nó trở nên hữu ích.

Ngoài ra, nếu bạn muốn tải xuống nhật ký cho chương trình phụ trợ, bạn cần chỉ định phiên bản phụ trợ bằng cách sử dụng tùy chọn sau trên dòng lệnh. Nhân viên ở đâu là tên của chương trình phụ trợ.

--version=worker 
+0

Đây là liên kết đến tài liệu cho tính năng tải xuống nhật ký. https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Downloading_Logs –

+0

Cảm ơn Greg, việc tải xuống nhật ký cung cấp cho tôi khả năng đọc các dòng nhật ký dài. Nhưng nó vẫn là một nỗi đau trong ass để đọc và tôi chỉ có thể truy cập chúng từ một máy mà cũng có một ứng dụng-engine-sdk trên nó (đó là chỉ khoảng 30% thời gian). Tôi thực sự đang tìm cách định cấu hình định dạng nhật ký để tôi sẵn sàng đọc nhật ký từ trình duyệt. – William

+0

Trên thực tế, nếu bạn nhìn vào bên trong tập tin kịch bản mà tôi đã đề cập, bạn sẽ thấy rằng nó thực sự chỉ bắt đầu ứng dụng java và bạn chỉ cần mang theo tệp JAR duy nhất đó. –

0

Nhìn qua các mã nguồn cho các công cụ cấu hình động cơ ứng dụng riêng của mình, tôi đã thấy rằng tất cả những gì đang làm nó gọi LogService cùng mà bạn sẽ có quyền truy cập vào bản thân thông qua các API LogService.

Do đó, câu trả lời cho câu hỏi của bạn thực sự đơn giản như thả mã từ liên kết sau vào cơ sở mã của bạn, đảm bảo nó chỉ cho người dùng quản trị và vấn đề được giải quyết.

https://developers.google.com/appengine/docs/java/logservice/overview

+0

Vâng có vẻ như khối lượng quá mức cần thiết để hardcode một trang để lấy các bản ghi ở định dạng tốt hơn vì AppEngine dường như không có khả năng (hoặc không ai biết cách) để cấu hình một Trình định dạng cho trình ghi nhật ký hoạt động. Nhưng địa ngục tôi đoán rằng câu trả lời câu hỏi của tôi cảm ơn. – William

+0

Lưu ý cuối cùng: Tôi nhận ra rằng việc nhấp vào biểu tượng dấu cộng sẽ mở rộng các dòng nhật ký để hiển thị bản ghi nhật ký đầy đủ. Vì vậy, tôi có quyền truy cập vào hồ sơ đầy đủ của tôi, nó chỉ trong một định dạng hơi clunky. – William