Hướng dẫn lưu lỗi của BotDetect ASP.NET 1.1 CAPTCHA

Từ phiên bản 2.0.3, BotDetect ASP.NET CAPTCHA được đóng gói với tiện ích lưu lỗi tập trung, rõ ràng, chỉ dành cho BotDetect, và dễ dàng chỉnh sửa theo yêu cầu dựa trên nền dự án log4net. Trang này hướng dẫn bạn cách dùng tiện ích này trong dự án của bạn.

Lưu lỗi của BotDetect CAPTCHA vào file văn bản

Xin lưu ý

Vì hướng dẫn này chỉ cách lưu lỗi vào file văn bản trên hệ thống file của máy chủ, nó chỉ hoạt động trên môi trường full trust. Nếu bạn muốn lưu lỗi trên môi trường mà ứng dụng của bạn không được ghi xuống hệ thống file, bạn có thể tìm hiểu thêm về các phương pháp khác của log4net (ví dụ, lưu vào database).

Hướng dẫn từng bước

  • Tìm thư mục con Troubleshooting trong thư mục cài đặt của BotDetect ASP.NET CAPTCHA (mặc định là C:\Program Files\Lanapsoft\BotDetect 2.0 CAPTCHA\ASP.NET 1.1\Assembly\Troubleshooting)
  • Copy file Lanap.BotDetect.Troubleshooting.dll và file log4net.dll vào thư mục Bin trong ứng dụng của bạn
  • Tạo file văn bản tên là error.txt trong cùng thư mục với file web.config, và chắc chắn rằng tài khoản người dùng IIS có quyền Modify trên đó.

    Tài khoản người dùng nào tùy thuộc vào phiên bản của mà bạn đang dùng. Mặc định bạn sẽ dùng:

    • IIS 5.0 hoặc 5.1: ASPNET
    • IIS 6.0 hoặc 7.0: NETWORK SERVICE
    • IIS 7.5: the ApplicationPoolIdentity dùng cho AppPool

    Bạn có thể thiết lập quyền từ dòng lệnh bằng cách chạy:

    cacls error.txt /G "ASPNET":C /E /C
    cacls error.txt /G "NETWORK SERVICE":C /E /C
    cacls error.txt /G "IIS AppPool\TODO:AppicationPoolName":C /E /C
  • Thêm các dòng sau đây vào phía trên của phần <configuration> trong file web.config:
    <configSections>
      <section name="log4net" 
        type="log4net.Config.Log4NetConfigurationSectionHandler, 
        log4net" />
    </configSections>
    
    <log4net>
    
      <!-- Errors are logged to a 'error.txt' file  -->
      <appender name="ErrorFileAppender" 
          type="log4net.Appender.FileAppender">
        <file value="error.txt" />
        <appendToFile value="true" />
        <lockingModel 
          type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout,log4net">
          <conversionPattern 
            value="%date [%thread] %type - %n%n%message%n%n" />
        </layout>
      </appender>
    
      <!-- Error logging is enabled, comment-out to disable -->
      <logger name="ErrorLogger">
        <level value="ERROR" />
        <appender-ref ref="ErrorFileAppender" />
      </logger>
    		
    </log4net>
    

    Phần này sẽ đăng ký một phần cấu hình của log4net với tất cả các thiết lập cần thiết.

  • Thêm các dòng sau đây vào phần trên của <system.web>, ngay trên phần tử <httpHandlers>:
    <httpModules> 
      <add type="
        Lanap.BotDetect.Troubleshooting.LoggingModule, 
          Lanap.BotDetect.Troubleshooting" 
        name="LoggingModule" />
    </httpModules>

    Phần này sẽ đăng ký module lưu lỗi HttpModule.

Giải thích

File Lanap.BotDetect.Troubleshooting.dll chứa một module đặc biệt (gọi là LoggingModule), dùng để xử lý sự kiện Application_OnError, cho các lỗi chỉ bắt nguồn từ mã nguồn của BotDetect. Tất cả các lỗi khác được bỏ qua, và bạn có thể xử lý chúng theo cách phù hợp với ứng dụng của bạn.

Dự án mẫu

Phương pháp được mô tả ở trên được hiện thực trong ví dụ troubleshooting được đóng gói với BotDetect, nên bạn có thể xem chi tiết mã nguồn của nó (C# or VB.NET) và file web.config.

Sử dụng module Troubleshooting trên máy chủ chính thức

  • Module troubleshooting đi kèm với BotDetect chỉ xử lý các lỗi xuất hiện trong mã nguồn của BotDetect, và sẽ không (về cơ bản) ảnh hưởng nghiêm trọng đến khả năng hoạt động của ứng dụng của bạn.
  • Tuy nhiên, điều này có thể thay đổi tuỳ thuộc vào cấu hình và thiết lập trên máy chủ của bạn; nếu bạn thấy nó làm chậm hệ thống, bạn chỉ cần tắt nó bằng cách xoá thành tố được đề cập ở trên <httpModules> trong file web.config.

Chẩn đoán và báo lỗi

  • File error.txt (trong cùng thư mục với file web.config) chứa chi tiết lỗi của BotDetect, và nếu bạn gửi nó cho chúng tôi, chúng tôi có thể giúp bạn chẩn đoán vấn đề và xác định chính xác nguyên nhân của nó.
  • Nếu file này trống và bạn vẫn gặp vấn đề, cố gắng tái hiện lại lỗi với một trong các dự án mẫu đi kèm với BotDetect thay vì dự án của bạn. Thư thay đổi mã nguồn của ví dụ để nó giống với dự án của bạn – vấn đề có xuất hiện sau khi bạn thay đổi như vậy hay không?
  • Nếu vấn đề xuất hiện chỉ trong ứng dụng của bạn và không xuất hiện khi sử dụng dự án mẫu, có thể vấn đề nằm trong mã nguồn của bạn và bạn nên xem lại Hướng dẫn sử dụng BotDetect CAPTCHA.

Cấu hình lưu lỗi cấp cao và bản quyền log4net

Vì LoggingModule sử dụng mã nguồn mở log4net (http://logging.apache.org/log4net/), bạn có thể thay đổi các phương thức lưu lỗi để phù hợp nhất với nhu cầu của bạn: bạn có thể lưu lỗi vào một file văn bản, hoặc cơ sở dữ liệu, trên màn hình...

Có rất nhiều tuỳ chọn và thiết lập khác nhau bạn có thể sử dụng, và chúng tôi khuyến khích bạn xem thêm về chúng tại http://logging.apache.org/log4net/release/manual/introduction.html.

Bạn có thể tham khảo bản quyền của log4net tại http://logging.apache.org/log4net/license.html, hoặc trong thư mục con Assembly\Troubleshooting của thư mục cài đặt BotDetect ASP.NET CAPTCHA (file log4net license.txtlog4net notice.txt).

Cấu trúc một lỗi của BotDetect CAPTCHA

Mỗi dòng lỗi có các thông tin sau:

  • Ngày giờ lỗi xuất hiện
  • Chi tiết stack trace của lỗi và các ngoại lệ
  • Nội dung của Session state liên quan đến chức năng của BotDetect CAPTCHA:

    • Session ID
    • Giá trị của các khoá Session State được sinh ra bởi BotDetect
    • Tập hợp các mã CAPTCHA cho Session hiện tại
    • Thời gian sinh, nội dung và sử dụng các mã
  • Chuỗi nguyên bản của trình duyệt máy khách

Ví dụ về lưu lỗi của BotDetect CAPTCHA

2007-02-06 16:55:45,125 [4244] 
  Lanap.BotDetect.Troubleshooting.ErrorLogger - 

Lanap.BotDetect.CaptchaGenerationException: 
  An error occurred in the BotDetect control internal code. - 
  Captcha binary data generation failed. - Check inner 
  exception for details. ---> 
  System.NullReferenceException: 
  Object reference not set to an instance of an object.
	
  at System.Drawing.Drawing2D.GraphicsPath.AddString(String s, 
    FontFamily family, Int32 style, Single emSize, 
    Point origin, StringFormat format)

  at Lanap.BotDetect.CurvedText.TextEffect(Graphics g, 
    String strText, Font font, Brush brush, Pen pen) 
  in C:\Projects\BotDetect\Component\DotNet 1.1\SourceCode\
      Component\BotDetectControl\CaptchaCore\CaptchaImage\
      Support\CurvedText.cs:line 174
  
  at Lanap.BotDetect.CurvedText.DrawText(RectangleF rect, 
    Graphics g, Font font, String strText, Brush brush, 
    Pen pen) 
  in C:\Projects\BotDetect\Component\DotNet 1.1\SourceCode\
    Component\BotDetectControl\CaptchaCore\CaptchaImage\
    Support\CurvedText.cs:line 28

  at Lanap.BotDetect.ChalkboardTextGenerator.DrawText(
    String text, Bitmap textDestination, Color 
    backgroundColor) 
  in C:\Projects\BotDetect\Component\DotNet 1.1\SourceCode\
    Component\BotDetectControl\CaptchaCore\CaptchaImage\
    TextGenerator\Generators\ChalkboardTextGenerator.cs:
    line 45

  at Lanap.BotDetect.ImageGenerator.GenerateImage(
    String textToRender, TextStyleEnum textStyle, 
    Color backgroundColor) 
  in C:\Projects\BotDetect\Component\
    DotNet 1.1\SourceCode\Component\BotDetectControl\
    CaptchaCore\CaptchaImage\ImageGenerator.cs:line 31
  
  at Lanap.BotDetect.ImageGenerator..ctor(String textToRender, 
    TextStyleEnum textStyle, Size size, Color backgroundColor) 
  in C:\Projects\BotDetect\Component\DotNet 1.1\SourceCode\
    Component\BotDetectControl\CaptchaCore\CaptchaImage\
    ImageGenerator.cs:line 25
   
  at Lanap.BotDetect.CaptchaCore.GenerateImage(String code, 
    TextStyleEnum textStyle, Size imageSize, 
      ImageFormatEnum imageFormat, Color backgroundColor) 
  in C:\Projects\BotDetect\Component\DotNet 1.1\SourceCode\
    Component\BotDetectControl\CaptchaCore\CaptchaCore.cs:
    line 185

  at Lanap.BotDetect.CaptchaHandler.DrawImage(HttpContext 
    context) 
  in c:\projects\botdetect\component\dotnet 1.1\sourcecode\
    component\botdetectcontrol\httphandler\captchahandler.cs
    :line 83
  
  --- End of inner exception stack trace ---
   
  at Lanap.BotDetect.CaptchaHandler.DrawImage(HttpContext 
    context) 
  in c:\projects\botdetect\component\dotnet 1.1\sourcecode\
    component\botdetectcontrol\httphandler\captchahandler.cs:
    line 101
  
  at Lanap.BotDetect.CaptchaHandler.ProcessRequest(HttpContext 
    context) 
  in c:\projects\botdetect\component\dotnet 1.1\sourcecode\
    component\botdetectcontrol\httphandler\captchahandler.cs:
    line 30
  
  at System.Web.CallHandlerExecutionStep.System.Web.
    HttpApplication+IExecutionStep.Execute()
   
  at System.Web.HttpApplication.ExecuteStep(IExecutionStep 
    step, Boolean& completedSynchronously), 

SESSION

ID : z4zeiu45wxykdm45pfj1ha45

LBD_CaptchaCodeCollection__csharpbotdetecttroubleshootingdemo_
  default_samplecaptcha : 

CODE COLLECTION

37774465 : CAPTCHA CODE

code : B4QKK
generated at : 6.2.2007 16:55:45
image requested: True
sound requested: False
, 

BROWSER

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 
  Avant Browser; Avant Browser; InfoPath.1; .NET CLR 1.1.4322;
  .NET CLR 2.0.50727)

Phiên bản hiện tại của BotDetect

Xin lưu ý

Trang này là bản dịch tiếng Việt không chính thức của trang gốc tiếng Anh: How To log internal BotDetect ASP.NET 1.1 CAPTCHA errors và có thể không chính xác, không đầy đủ hoặc không cập nhật.

Cập nhật ngày 2009-11-30. Áp dụng cho BotDetect ASP.NET CAPTCHA v2.0.15 và BotDetect ASP CAPTCHA v2.0.9.

language: English Español Tiếng Việt