<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://api.springnote.com">
  <identifier type="integer">1697474</identifier>
  <title>ActiveSupport + b*.rb + buffered_logger.rb</title>
  <relation_is_part_of type="integer">1697468</relation_is_part_of>
  <date_modified type="datetime">2009-09-03T11:56:49Z</date_modified>
  <uri>http://nainu.springnote.com/pages/1697474</uri>
  <date_created type="datetime">2008-09-01T08:58:47Z</date_created>
  <source>&lt;p&gt;&#50836;&#51608;&#51008; &#53076;&#53076;&#50500;, &#47336;&#48708;, &#44536;&#47532;&#44256; jquery&#50640; &#44866;&#54784; &#51080;&#45796;.&lt;br /&gt;
&#44866;&#54784;&#47564; &#51080;&#44256; &#44277;&#48512;&#45716; &#51096; &#50504;&#54620;&#45796;. ...&lt;/p&gt;
&lt;p&gt;&#50629;&#47924; &#51473;&#50640; &#49884;&#44036;&#51060; &#51328; &#45224;&#50500;&#49436; &#51068;&#44284; &#51649;&#51217;&#51201;&#51004;&#47196; &#50672;&#44288;&#46104;&#45716; jquery&#50752; &#47336;&#48708;&#44032; &#44277;&#48512; &#54980;&#48372;&#47196; &#50732;&#46972;&#50772;&#45716;&#45936;&lt;br /&gt;
&#45230;&#50640; jquery&#47484; &#52376;&#51020; &#50024;&#48372;&#47732;&#49436; &#44277;&#48512;&#47484; &#50557;&#44036; &#54664;&#50632;&#44592; &#46428;&#50640; &#45224;&#45716; &#51200;&#45377;&#49884;&#44036;&#51008; &#47112;&#51068;&#49828;&#47484; &#48372;&#44592;&#47196; &#54664;&#45796;.&lt;/p&gt;
&lt;p&gt;&#50529;&#54000;&#48652;&#49436;&#54252;&#53944;&#48512;&#53552; &#49884;&#51089;&#54644;&#49436; &#45236;&#53412;&#45716; &#45936;&#44620;&#51648; &#53076;&#46300;&#47484; &#52041; &#54993;&#50612;&#48372;&#44592;&#47196; &#54664;&#45796;.&lt;br /&gt;
&#45576;&#51004;&#47196;&#47564; &#54993;&#51004;&#47732; &#45208;&#51473;&#50640; &#45796; &#44620;&#47673;&#51004;&#45768;&#44620; &#44036;&#45800;&#55176; &#51221;&#47532;&#47564; &#54644; &#46160;&#44592;&#47196; &#54664;&#45796;.&lt;/p&gt;
&lt;p&gt;abc &#49692;&#51004;&#47196; &#51228;&#51068; &#50948;&#50640; &#51080;&#45716; b*.rb &#46308;&#51012; &#48420;&#45796;. a&#47196; &#49884;&#51089;&#54616;&#45716; &#54028;&#51068;&#51008; &#50630;&#50632;&#45796;.&lt;/p&gt;
&lt;h3&gt;lib/buffered_logger.rb&lt;/h3&gt;
&lt;ol class="code"&gt;
&lt;li&gt;module ActiveSupport&lt;br /&gt;
&amp;nbsp; # Inspired by the buffered logger idea by Ezra&lt;br /&gt;
&amp;nbsp; class BufferedLogger&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; module Severity&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEBUG&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INFO&amp;nbsp;&amp;nbsp;&amp;nbsp; = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WARN&amp;nbsp;&amp;nbsp;&amp;nbsp; = 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR&amp;nbsp;&amp;nbsp; = 3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FATAL&amp;nbsp;&amp;nbsp; = 4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNKNOWN = 5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; include Severity&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;class &#50504;&#50640; module &#49440;&#50616;&#54644;&#49436; enum&#52376;&#47100;? &#54841;&#51008; C&#51032; define&#52376;&#47100;? &#54876;&#50857;&#54620;&#45796;. &#50724;&#50724;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;module ActiveSupport&lt;br /&gt;
&amp;nbsp; # Inspired by the buffered logger idea by Ezra&lt;br /&gt;
&amp;nbsp; class BufferedLogger&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for severity in Severity.constants&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; class_eval &amp;lt;&amp;lt;-EOT, __FILE__, __LINE__&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def #{severity.downcase}(message = nil, progname = nil, &amp;amp;block)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add(#{severity}, message, progname, &amp;amp;block)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def #{severity.downcase}?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #{severity} &amp;gt;= @level&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EOT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&#47700;&#49436;&#46300; &#49440;&#50616;&#51012; class_eval&#47196; &#54616;&#45716; &#53076;&#46300;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;logger.warn, logger.info, logger.warn? logger.info? &#46321;&#51032; &#47700;&#49436;&#46300;&#47484; &#51221;&#51032;&#54620;&#45796;. &#49900;&#54540;&#54620; &#53076;&#46300;&#46972; &#45208;&#51473;&#50640; &#49789;&#44172; &#52280;&#51312;&#54616;&#44592; &#51339;&#51012;&#46319;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code" style="margin-left: 2em;"&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set the auto-flush period. Set to true to flush after every log message,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # to an integer to flush every N messages, or to false, nil, or zero to&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # never auto-flush. If you turn auto-flushing off, be sure to regularly&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # flush the log yourself -- it will eat up memory until you do.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def auto_flushing=(period)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @auto_flushing =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case period&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when true;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when false, nil, 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAX_BUFFER_SIZE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when Integer;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; period&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else raise ArgumentError, "Unrecognized auto_flushing period: #{period.inspect}"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;auto_flushing= &#51008; period&#47484; &#51064;&#51088;&#47196; &#48155;&#45716; &#44163; &#44057;&#51648;&#47564; boolean &#44050;&#46020; &#48155;&#50500;&#49436; &#52376;&#47532;&#54620;&#45796;.&lt;br /&gt;
&#47700;&#49436;&#46300;&#45716; &#54620;&#44032;&#51648; &#51068;&#51012; &#54644;&#50556; &#54616;&#51648;&#47564;, &#54620; &#51333;&#47448;&#51032; &#51064;&#51088;&#47484; &#48155;&#51012; &#54596;&#50836;&#45716; &#50630;&#45796;. &#54616;&#53948; &#51088;&#44592; &#54624; &#51068;&#47564; &#51096;&#54616;&#47732; &#46108;&#45796;. &#44060;&#48156;&#51088; &#54747;&#44040;&#47532;&#51648; &#50506;&#44172;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#51060;&#44057;&#51008; &#53076;&#46300;&#45716; &#49373;&#49457;&#51088;&#50640;&#46020; &#51316;&#51116;&#54616;&#45716;&#45936; &#48148;&#47196; @log&#47484; &#49373;&#49457;&#54616;&#45716; &#48512;&#48516;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def initialize(log, level = DEBUG)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @level&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = level&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @buffer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = []&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @auto_flushing = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @no_block = false&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if log.respond_to?(:write)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log = log&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elsif File.exist?(log)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log = open(log, (File::WRONLY | File::APPEND))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log.sync = true&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileUtils.mkdir_p(File.dirname(log))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log = open(log, (File::WRONLY | File::APPEND | File::CREAT))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log.sync = true&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log.write("# Logfile created on %s" % [Time.now.to_s])&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;write&#44032; &#51080;&#51004;&#47732; &#44536;&#45285; &#50420;&#45796;. &#50780;&#45264;&#47732; &#50864;&#47536; @log.write&#47564; &#50424; &#44732;&#45768;&#44620;..&lt;br /&gt;
&#44536;&#47111;&#51648; &#50506;&#51004;&#47732; &#54028;&#51068; &#51060;&#47492;&#51004;&#47196; &#44036;&#51452;&#54616;&#44256;, &#52286;&#50500;&#48376;&#45796;. &#44536;&#47000;&#46020; &#50630;&#51004;&#47732; &#46356;&#47113;&#53664;&#47532;+&#54028;&#51068; &#51060;&#47492;&#51004;&#47196; &#44036;&#51452;&#54616;&#44256; &#46356;&#47113;&#53664;&#47532;&#46020; &#47564;&#46308;&#44256; &#52286;&#45716;&#45796;.&lt;br /&gt;
&#54028;&#51068;&#51060; &#50630;&#45716; &#44221;&#50864; &#51060; &#47196;&#44536; &#54028;&#51068;&#51008; &#49352; &#44163;&#51060;&#48064;&#47196; &#47592; &#50967;&#51460;&#50640; &#51452;&#49437;&#44620;&#51648; &#45804;&#50500;&#51452;&#45716; &#49468;&#49828;&#47484; &#48372;&#50668;&#51456;&#45796;.&lt;/p&gt;
&lt;p&gt;&#54980;&#50640; write&#50808;&#50640; &#45796;&#47480; &#47700;&#49436;&#46300;&#47484; &#50424; &#51068;&#51060; &#49373;&#44592;&#45716;&#45936;... &#48148;&#47196; close&#54624; &#46412;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def close&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flush&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log.close if @log.respond_to?(:close)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @log = nil&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;@log&#44032; IO &#44061;&#52404;? &#46972;&#47732; &#50500;&#47560; close&#47484; &#47784;&#46160; &#44032;&#51648;&#44256; &#51080;&#51012; &#44163;&#51060;&#45796;. &#50948;&#50948; &#53076;&#46300;&#50640;&#49436; &#46160;&#48264;&#51704;&#50752; &#49464;&#48264;&#51704; &#44221;&#50864;&#45716; &#47784;&#46160; close&#47484; &#44032;&#51648;&#44256; &#51080;&#51012; &#44163;&#51060;&#45796;.&lt;br /&gt;
&#54616;&#51648;&#47564; &#51649;&#51217; &#44396;&#54788;&#54620; &#44061;&#52404;&#46972;&#47732;? &#51060; &#44061;&#52404;&#45716; write&#45716; &#51080;&#45716;&#45936; close&#45716; &#50630;&#45796;&#47732;?&lt;/p&gt;
&lt;p&gt;&#44536;&#47088; &#44221;&#50864;&#50640; &#50948; close &#47700;&#49436;&#46300;&#51032; &#46160;&#48264;&#51704; &#51460; &#44057;&#51008; &#53076;&#46300;&#44032; &#54596;&#50836;&#54616;&#45796;.&lt;br /&gt;
duck type&#51012; &#51060;&#50857;&#54616;&#50668; @log&#47484; &#49373;&#49457;&#54616;&#50668; &#50416;&#44256;... close&#45716; &#51080;&#51004;&#47732; &#54616;&#44256; &#50630;&#51004;&#47732; &#47568;&#44256;.&lt;br /&gt;
&#50500;.. &#50500;&#47492;&#45813;&#45796;. (&#46972;&#44256; &#49464;&#45516;&#54620;&#45796;.-_-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#50724;&#45720;&#51008; &#48708;&#46020; &#50724;&#44256; &#54616;&#45768;&#44620; &#51060;&#47564;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dev.rubyonrails.org/browser/branches/2-1-caching/activesupport/lib/active_support/buffered_logger.rb"&gt;http://dev.rubyonrails.org/browser/branches/2-1-caching/activesupport/lib/active_support/buffered_logger.rb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</source>
  <rights nil="true"></rights>
  <creator>nainu</creator>
  <contributor_modified>nainu</contributor_modified>
  <version type="integer">35</version>
  <tags></tags>
</page>
