SlideShare a Scribd company logo
1 of 36
Download to read offline
Loggerの
構造と拡張
Genki Sugawara
Elixir Meetup #1 in Drecom
お前誰よ
• twitter: @sgwr_dts
• github/bitbicket: winebarrel
• インフラまわりのお仕事やってます
• RubyとかAWSとか
• Elixirレベル: たまねぎ剣士
事の始まり
• mariaex
• MariaDB/MySQLのクライアント
{:ok, p} = Mariaex.Connection.start_link(
username: "ecto", database: "ecto_test")
rs = Mariaex.Connection.query(
p, "SELECT id, title FROM test1")
事の始まり
• 接続時のエラーをハンドルしたい
• ユーザ名・パスワードの間違い
• DB名の間違い…etc
事の始まり
start_linkでのエラー時に{:error, _}が返ってくるので
ハンドルしてみる
# mariaex: v0.4.3
_pid = case Mariaex.Connection.start_link(username: "ecto", database: "ecto_test") do
{:ok, pid} -> pid
{:error, err} ->
IO.puts err.mariadb.message
exit(1)
end
事の始まり
!?
事の始まり
handle_otp_reportsをfalseにしてみる
config :logger, handle_otp_reports: false
事の始まり
!?
事の始まり
• handle_otp_reportsをfalseにするとErlangのエラーハンドラ
が有効になる
• …仕方ないのでLoggerのソースコードを読むことに
Logger
• http://elixir-lang.org/docs/stable/logger/Logger.html
• https://github.com/elixir-lang/elixir/tree/master/lib/logger
• 標準ライブラリではない?ビルトインのロギングモジュール
Logger
mixでプロジェクトを作ると、デフォルトで起動
defmodule Hoge.Mixfile do
use Mix.Project
# ...
def application do
[applications: [:logger],
mod: {Hoge, []}]
end
Logger
mixでプロジェクトを作ると、デフォルトで起動
defmodule Hoge.Mixfile do
use Mix.Project
# ...
def application do
[applications: [:logger],
mod: {Hoge, []}]
end
Logger
こんな感じでコンソールにログ出力
iex(1)> require Logger
nil
iex(2)> Logger.info "oops"
:ok
18:45:59.211 [info] oops
Supervision Tree
Logger.App (supervisor: rest_for_one)
+ Logger.Watcher (worker①)
| + Logger.Watcher (supervisor: simple_one_for_one)
| + Logger.Watcher (worker②)
+ Logger.Watcher (worker③)
Supervision Tree
[worker(GenEvent, [[name: Logger]]),
worker(Logger.Watcher, [Logger, Logger.Config, []],
[id: Logger.Config, function: :watcher]),
supervisor(Logger.Watcher, [Logger.Config, :handlers, []]),
worker(Logger.Watcher,
[:error_logger, Logger.ErrorHandler,
{otp_reports?, sasl_reports?, threshold}, :link],
[id: Logger.ErrorHandler, function: :watcher])]
Logger.App
• アプリケーションモジュール
• プロジェクト開始時にLogger.App.start()を実行
Logger.Watcher
• supervisor兼worker
• GenEvent(name: Logger)のmonitor
• GenEventにハンドラを登録
• 再起動戦略のためにsupervisor化?
Logger.Watcher
# mod: GenEvent(Logger)
def init({mod, handler, args, :monitor}) do
ref = Process.monitor(mod)
res = GenEvent.add_mon_handler(mod, handler, args)
do_init(res, mod, handler, ref)
end
def init({mod, handler, args, :link}) do
res = :gen_event.add_sup_handler(mod, handler, args)
do_init(res, mod, handler, nil)
end
Handlers
• GenEventのハンドラ
• handle_event()でログ出力(とか)を行う
Handlers
以下のような感じで、
イベントハンドラにメッセージが送られる
Logger.info(msg)
-> Logger.bare_log(msg)
-> Logger.notify(msg)
-> GenEvent.notify(Logger, msg)
Handlers
• Logger.Watcher worker①
• → Logger.Config
• Logger.Watcher worker②
• → Logger.Backends.Consoleとか
• Logger.Watcher worker③
• → Logger.ErrorHandler
Logger.Config
• log levelやmodeなどの設定を保持
• なんでイベントをハンドルしてんの?
• → sync/asyncを変更するため
Logger.Config
:sync_threshold - if the Logger manager has more than
sync_threshold messages in its queue, Logger will change to sync
mode, to apply backpressure to the clients.
• ログメッセージのイベントを受信
• → メッセージキューの長さをみて動的に同期・非同期を変更
Logger.Backends.Console
• コンソールに出力するBackend
• ログ出力先(Backend)の一実装
• ビルトインで実装されているのはこれだけ
Logger.Backends.Console
設定の:consoleはLogger.Backends.Consoleに変換される
カスタムバックエンドはモジュールを渡す必要がある
config :logger, backends: [:console] # デフォルト値
def translate_backend(:console), do: Logger.Backends.Console
def translate_backend(other), do: other
Logger.ErrorHandler
• ErlangのOTP/SASLのエラーログをハンドル
Logger.ErrorHandler
そもそもErlangのOTP/SASLのエラーはハンドルされてるっぽい
• :error_logger
• http://www.erlang.org/doc/man/error_logger.html
以下のハンドラがデフォルトで追加されている
• error_logger_tty_h
• sasl_logger_tty_h
OTPのエラーハンドリング
ErrorHandler追加時の動作:
handle_otp_reports: trueの場合
• error_loggerからerror_logger_tty_hを削除
• GenEventにErrorHandlerを追加
• state: otp: true
OTPのエラーハンドリング
ErrorHandler追加時の動作:
handle_otp_reports: falseの場合
• error_loggerの操作は行わない
• GenEventにErrorHandlerを追加
• state: otp: false
OTPのエラーハンドリング
handle_otp_reportsがtrue/falseに関わらず
Logger.ErrorHandlerには
OPTのエラーイベント(error_report等)は飛んでくる
ただし、state: otp: trueの場合、ログ出力し
state: otp: falseの場合はログ出力しない
OTPのエラーハンドリング
結果として
• handle_otp_reports: true
• ErrorHandler: ログ出力あり (state: otp: trueのため)
• error_logger: ログ出力なし (ハンドラが削除されているため)
• handle_otp_reports: false
• ErrorHandler: ログ出力なし (state: otp: falseのため)
• error_logger: ログ出力あり (ハンドラがそのままのため)
OTPエラー出力の抑止
config :logger, handle_otp_reports: false
# 手動でerror_loggerからハンドラを削除
:error_logger.delete_report_handler(:error_logger_tty_h)
# mariaex: v0.4.3
_pid = case Mariaex.Connection.start_link(username: "ecto", database: "ecto_test") do
{:ok, pid} -> pid
{:error, err} ->
IO.puts err.mariadb.message
exit(1)
end
おまけ: 雑カスタムBackend
defmodule MyBackend do
use GenEvent
def init(__MODULE__) do
init({:user, []})
end
def init({device, _opts}) do
config = Application.get_env(:logger, :my_backend, [])
format = Keyword.get(config, :format) |> Logger.Formatter.compile
level = Keyword.get(config, :level, :info)
metadata = Keyword.get(config, :metadata, [])
{:ok, %{format: format, metadata: metadata,
level: level, colors: %{}, device: device}}
end
おまけ: 雑カスタムBackend
def handle_call({:configure, _options}, state) do
{:ok, :ok, state}
end
def handle_event({_level, gl, _event}, state)
when node(gl) != node() do
{:ok, state}
end
def handle_event({level, _gl, {Logger, msg, _ts, _md}}, state) do
IO.inspect [level, msg]
{:ok, state}
end
end
おまけ: 雑カスタムBackend
config :logger, backends: [MyBackend]
$ mix run test.exs
[:info, "hello"]
以上です
ご静聴ありがとうございました

More Related Content

What's hot

Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレperyaudo
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例Koichi Shimozono
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての GatlingNaoya Nakazawa
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組Mercari Inc.
 
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいKazuhiro Oinuma
 
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみるLeap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみるTsuyoshi Seino
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016Kohei Hoshi
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Kamimura Taichi
 

What's hot (20)

Docker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレDocker+CoreOS+GCEで自動スケール分散レイトレ
Docker+CoreOS+GCEで自動スケール分散レイトレ
 
Kubernetes helm & helmc
Kubernetes helm & helmcKubernetes helm & helmc
Kubernetes helm & helmc
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例serverspecを使用したサーバ設定テストの実例
serverspecを使用したサーバ設定テストの実例
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての Gatling
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組
 
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
 
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみるLeap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
Amazon ECS事始め
Amazon ECS事始めAmazon ECS事始め
Amazon ECS事始め
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
MHA on AWS+Rails
MHA on AWS+RailsMHA on AWS+Rails
MHA on AWS+Rails
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方Ansible roleとinventoryの書き方
Ansible roleとinventoryの書き方
 

Viewers also liked

ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証Sugawara Genki
 
20111012 jaws ug-tokyo勉強会-cookpad-on-aws
20111012 jaws ug-tokyo勉強会-cookpad-on-aws20111012 jaws ug-tokyo勉強会-cookpad-on-aws
20111012 jaws ug-tokyo勉強会-cookpad-on-awsSugawara Genki
 
クックパッドの開発について
クックパッドの開発についてクックパッドの開発について
クックパッドの開発についてSugawara Genki
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Sugawara Genki
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_codeSugawara Genki
 
EC2の天井を超える
EC2の天井を超えるEC2の天井を超える
EC2の天井を超えるSugawara Genki
 
2014 09-23 Mechanism of Gossip protocol
2014 09-23 Mechanism of Gossip protocol2014 09-23 Mechanism of Gossip protocol
2014 09-23 Mechanism of Gossip protocolSugawara Genki
 
EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)Sugawara Genki
 
CloudWatch Logsについて
CloudWatch LogsについてCloudWatch Logsについて
CloudWatch LogsについてSugawara Genki
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Sugawara Genki
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいSugawara Genki
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作Sugawara Genki
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 

Viewers also liked (14)

ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証ゴシッププロトコルによる冗長化と負荷分散の検証
ゴシッププロトコルによる冗長化と負荷分散の検証
 
20111012 jaws ug-tokyo勉強会-cookpad-on-aws
20111012 jaws ug-tokyo勉強会-cookpad-on-aws20111012 jaws ug-tokyo勉強会-cookpad-on-aws
20111012 jaws ug-tokyo勉強会-cookpad-on-aws
 
200k/sec
200k/sec200k/sec
200k/sec
 
クックパッドの開発について
クックパッドの開発についてクックパッドの開発について
クックパッドの開発について
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
 
EC2の天井を超える
EC2の天井を超えるEC2の天井を超える
EC2の天井を超える
 
2014 09-23 Mechanism of Gossip protocol
2014 09-23 Mechanism of Gossip protocol2014 09-23 Mechanism of Gossip protocol
2014 09-23 Mechanism of Gossip protocol
 
EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)EC2でkeepalived+LVS(DSR)
EC2でkeepalived+LVS(DSR)
 
CloudWatch Logsについて
CloudWatch LogsについてCloudWatch Logsについて
CloudWatch Logsについて
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 
ナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしいナウなヤングにCloud Formationが流行ってほしい
ナウなヤングにCloud Formationが流行ってほしい
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 

Similar to Elixir Meetup #1 Loggerの構造と拡張

fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングYuichi Tateno
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するaktsk
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3moai kids
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選Drecom Co., Ltd.
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Takafumi ONAKA
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理Akihiro Kitada
 

Similar to Elixir Meetup #1 Loggerの構造と拡張 (20)

fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギングfluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Haikara
HaikaraHaikara
Haikara
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選実録!Railsのはまりポイント10選
実録!Railsのはまりポイント10選
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?Rails3.2ってどう変わるの?
Rails3.2ってどう変わるの?
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 

Recently uploaded (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 

Elixir Meetup #1 Loggerの構造と拡張