Our mission

At Phrase, we believe when you unlock language, you unlock opportunity.

That’s why we’re pushing the boundaries of language technology through automation and artificial intelligence to power high quality, scalable, and fast localization for teams of any size.

We aim to open the door to global business by giving everybody access to the content they need in the language they speak.

Our values

We’re committed to the principles that guide our team and our work culture.

Team photo | Phrase
Two colleagues collaborating at a standing desk with a laptop, red sticky notes on glass wall visible in bright modern office Monolog is a Python package that provides a simple interface for logging and tracing without any dependencies. It currently supports the following handlers: Stream, Rotating File, TimedRotatingFile, Slack, Telegram, and SMTP. **This library currently only supports Python 3.6+.** ## Installation ```bash pip install monolog ``` ## Getting Started ### Stream Handler Stream handler is the simplest one of the handlers available. The following example shows how to create a logger and send a critical message. ```python import sys from monolog import Logger, StreamHandler, DEBUG logger = Logger('myapp') logger.push_handler(StreamHandler(sys.stdout, DEBUG)) logger.critical('Hello World!', {'context': 'value'}) ``` ### Rotating File Handler Rotating file handler rolls over and creates a new file once the file has reached the maximum size. The following example shows how to create a logger and send a critical message. ```python from monolog import Logger, RotatingFileHandler, DEBUG logger = Logger('myapp') logger.push_handler(RotatingFileHandler('/tmp/myapp.log', DEBUG, max_bytes=1024, backup_count=3)) logger.critical('Hello World!', {'context': 'value'}) ``` ### Timed Rotating File Handler TimedRotatingFile handler rolls over at certain timed intervals. The following example shows how to create a logger and send a critical message. ```python from monolog import Logger, TimedRotatingFileHandler, DEBUG logger = Logger('myapp') logger.push_handler(TimedRotatingFileHandler('/tmp/myapp.log', DEBUG, when='d', interval=1, backup_count=3)) logger.critical('Hello World!', {'context': 'value'}) ``` The following intervals are supported (case insensitive): | Value | Type | Interval | |:---:|:---:|:---:| | S | Seconds | 1 | | M | Minutes | 60 | | H | Hours | 3600 | | D | Days | 86400 | | W0-W6 | Weekday (0=Monday) | N/A | | midnight | Roll over at midnight | N/A | ### Slack Handler Slack handler sends log messages to a Slack channel. The following example shows how to create a logger and send a critical message to a Slack channel. ```python from monolog import Logger, SlackHandler, DEBUG logger = Logger('myapp') logger.push_handler(SlackHandler('YOUR_API_KEY', 'YOUR_CHANNEL', DEBUG)) logger.critical('Hello World!', {'context': 'value'}) ``` ### Telegram Handler Telegram handler sends log messages to a Telegram chat. The following example shows how to create a logger and send a critical message to a Telegram chat. ```python from monolog import Logger, TelegramHandler, DEBUG logger = Logger('myapp') logger.push_handler(TelegramHandler('YOUR_TOKEN', 'YOUR_CHAT_ID', DEBUG)) logger.critical('Hello World!', {'context': 'value'}) ``` ### SMTP Handler SMTP handler sends log messages to an email address. The following example shows how to create a logger and send a critical message to an email address. ```python from monolog import Logger, SMTPHandler, DEBUG logger = Logger('myapp') logger.push_handler(SMTPHandler('localhost', 25, 'root@localhost', 'errors@example.com', 'Error!', DEBUG)) logger.critical('Hello World!', {'context': 'value'}) ``` ## Log Levels Monolog offers the following log levels: | Level | Code | Description | |:---:|:---:|:---| | DEBUG | 10 | Detailed debug information. | | INFO | 20 | Interesting events. | | NOTICE | 25 | Normal but significant events. | | WARNING | 30 | Exceptional occurrences that are not errors. | | ERROR | 40 | Runtime errors that do not require immediate action. | | CRITICAL | 50 | Critical conditions
Four male colleagues in discussion by large office windows overlooking a European city street with ornate historic buildings

Fully embrace diversity

We love being a diverse team spanning the globe and believe to our core that diversity is a moral, social, and commercial good. We’re committed to acknowledging the nuance of this topic, and are passionate about having real conversations to move it forward.

One Team, Built on Respect

Respect is at the root of every relationship at Phrase—we respect each other, we respect our customers, and that respect drives trust. It takes all of us, working as one team across the company to be successful. A successful team requires people to assume good intent, be respectfully challenging, debate the facts not the person, be helpful, share key insights — and above all, be accountable to one another.

We show up to make a difference

Every person at Phrase should make a difference. We strongly encourage proactivity to drive high performance and boldness with experimentation to push our boundaries. Fearless innovation means being distinctive, having the freedom and courage to fail, always striving to be better than yesterday.

Image

ISO27001

Image

GDPR Compliant

Image

PCI DSS

Reliable and secure

The Phrase Language Intelligence Platform follows best practices in security, stability and performance. This means we comply with the Principles and Security Statements of ISO 27001, PCI DSS, AWS, CCPA and GDPR. Our infrastructure is one of the most resilient and robust available (zero downtime deployments and a 99.9% uptime), and we work hard to ensure it stays that way.

Environmental & social sustainability

At Phrase, environmental & social sustainability is a core part of our commitment to creating a positive impact on our people and the wider community. 

Our policies reflect a strong commitment to sustainable operations today, with plans to expand these efforts in the future.

Let’s grow together

We’re building a culture where personal and professional growth are just as important as business growth. See what it’s like to work at Phrase, learn about our team, and find out what sparks our motivation—in and out of the office.

Our leadership team

Georg Ell photo | Phrase

Chief Executive Officer

Georg Ell

Martin Konop photo | Phrase

Chief Financial Officer

Martin Konop

Stephen Lumenta photo | Phrase

Chief Product and Technology Officer

Stephen Lumenta

Ian Woolley portrait photo | Phrase

Chief Revenue Officer

Ian Woolley

Andrea Tabacchi photo | Phrase

Chief Customer Officer

Andrea Tabacchi

Jason Hemingway | Phrase

Chief Marketing Officer

Jason Hemingway

Marion Kaehlke Headshot | Phrase

Chief People Officer

Marion Kaehlke

Our offices

Czech Republic

Václavské náměstí 2132/47

110 00 Praha 1

Czech Republic

Image

Germany

ABC-Straße 4

20354 Hamburg

Germany

Image

United Kingdom

73 Cornhill

London

United Kingdom

London | Phrase

United States

350 East Avenue, Suite 203

Rochester, NY 14604

United States

Image

Want to find out more?