diff --git a/CHANGES b/CHANGES
index eedb2074c10c3c6ddee2fdafccaa319bf0ff72d0..4d47191605b1b5b7103f19139f04cb2668a1f62c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -98,6 +98,11 @@ chan_pjsip
  * Path support has been added with the 'support_path' option in registration
    and aor sections.
 
+res_pjsip
+------------------
+ * A 'debug' option has been added to the globals section that will allow
+   sip messages to be logged.
+
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 11 to Asterisk 12 --------------------
 ------------------------------------------------------------------------------
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 21bc6b4ea98a6c788a642b186a26ce25d2e9d536..4948ba43505834d7d6f5b3ceee589ca3f4d41005 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -69,6 +69,8 @@ Realtime Configuration:
    potentially cause a migration problem.  If so, it may be necessary to
    manually alter the affected table/column to bring it back in line with the
    migration scripts.
+ * A new column was added to the 'ps_globals' realtime table for the 'debug'
+   option.
 
 
 ===========================================================
diff --git a/configs/pjsip.conf.sample b/configs/pjsip.conf.sample
index f04c0cd1478a08a5cc02938f185b770e09531486..a61084b53348c8af775af79a71ddaf710f4fa5f2 100644
--- a/configs/pjsip.conf.sample
+++ b/configs/pjsip.conf.sample
@@ -645,7 +645,6 @@
                         ; A value of 0 indicates no maximum (default: "0")
 ;type=  ; Must be of type system (default: "")
 
-
 ;==========================GLOBAL SECTION OPTIONS=========================
 ;[global]
 ;  SYNOPSIS: Options that apply globally to all SIP communications
@@ -664,8 +663,8 @@
                                                         ; endpoint (default: "d
                                                         ; efault_outbound_endpo
                                                         ; int")
-
-
+;debug=no ; Enable/Disable SIP debug logging.  Valid options include yes|no
+          ; or a host address (default: "no")
 
 
 ; MODULE PROVIDING BELOW SECTION(S): res_pjsip_acl
diff --git a/contrib/ast-db-manage/config/versions/21e526ad3040_add_pjsip_debug_option.py b/contrib/ast-db-manage/config/versions/21e526ad3040_add_pjsip_debug_option.py
new file mode 100644
index 0000000000000000000000000000000000000000..2adca628b51b18fa2e14c8c7e624ed263a99d927
--- /dev/null
+++ b/contrib/ast-db-manage/config/versions/21e526ad3040_add_pjsip_debug_option.py
@@ -0,0 +1,21 @@
+"""add pjsip debug option
+
+Revision ID: 21e526ad3040
+Revises: 2fc7930b41b3
+Create Date: 2014-01-30 10:44:02.297455
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '21e526ad3040'
+down_revision = '2fc7930b41b3'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+    op.add_column('ps_globals', sa.Column('debug', sa.String(40)))
+
+def downgrade():
+    op.drop_column('ps_globals', 'debug')
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index 1fea42f2b8f58bf833bddc42db4947fc0de2ab18..ecec12d054e6095b041db543ec66ef59a794605b 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -1886,4 +1886,13 @@ int ast_sip_register_supplement(struct ast_sip_supplement *supplement);
  */
 void ast_sip_unregister_supplement(struct ast_sip_supplement *supplement);
 
+/*!
+ * \brief Retrieve the system debug setting (yes|no|host).
+ *
+ * \note returned string needs to be de-allocated by caller.
+ *
+ * \retval the system debug setting.
+ */
+char *ast_sip_get_debug(void);
+
 #endif /* _RES_PJSIP_H */
diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index fc4afedc5ebb6e21ac4a671abfde674ec60ec70a..3ad482dab645523c8e2d3923a9a067c17f9ffe6b 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -1081,7 +1081,10 @@
 				<configOption name="default_outbound_endpoint" default="default_outbound_endpoint">
 					<synopsis>Endpoint to use when sending an outbound request to a URI without a specified endpoint.</synopsis>
 				</configOption>
-
+				<configOption name="debug" default="no">
+					<synopsis>Enable/Disable SIP debug logging.  Valid options include yes|no or
+                                        a host address</synopsis>
+				</configOption>
 			</configObject>
 		</configFile>
 	</configInfo>
diff --git a/res/res_pjsip/config_global.c b/res/res_pjsip/config_global.c
index 1ae3e15771216d92c6c410b8e6440519435fd169..0f4350d8094c3f88d5df7f90bd3380e6a0d0fcf3 100644
--- a/res/res_pjsip/config_global.c
+++ b/res/res_pjsip/config_global.c
@@ -37,6 +37,8 @@ struct global_config {
 	AST_DECLARE_STRING_FIELDS(
 		AST_STRING_FIELD(useragent);
 		AST_STRING_FIELD(default_outbound_endpoint);
+		/*! Debug logging yes|no|host */
+		AST_STRING_FIELD(debug);
 	);
 	/* Value to put in Max-Forwards header */
 	unsigned int max_forwards;
@@ -53,7 +55,7 @@ static void *global_alloc(const char *name)
 {
 	struct global_config *cfg = ast_sorcery_generic_alloc(sizeof(*cfg), global_destructor);
 
-	if (!cfg || ast_string_field_init(cfg, 64)) {
+	if (!cfg || ast_string_field_init(cfg, 80)) {
 		return NULL;
 	}
 
@@ -97,6 +99,21 @@ char *ast_sip_global_default_outbound_endpoint(void)
 	return ast_strdup(cfg->default_outbound_endpoint);
 }
 
+char *ast_sip_get_debug(void)
+{
+	char *res;
+	struct global_config *cfg = get_global_cfg();
+
+	if (!cfg) {
+		return 0;
+	}
+
+	res = ast_strdup(cfg->debug);
+	ao2_ref(cfg, -1);
+
+	return res;
+}
+
 int ast_sip_initialize_sorcery_global(struct ast_sorcery *sorcery)
 {
 	snprintf(default_useragent, sizeof(default_useragent), "%s %s", DEFAULT_USERAGENT_PREFIX, ast_get_version());
@@ -114,6 +131,8 @@ int ast_sip_initialize_sorcery_global(struct ast_sorcery *sorcery)
 			OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, useragent));
 	ast_sorcery_object_field_register(sorcery, "global", "default_outbound_endpoint", DEFAULT_OUTBOUND_ENDPOINT,
 			OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, default_outbound_endpoint));
+	ast_sorcery_object_field_register(sorcery, "global", "debug", "no",
+			OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, debug));
 
 	return 0;
 }
diff --git a/res/res_pjsip_logger.c b/res/res_pjsip_logger.c
index 19b276c2eb0ef2857989fd64ea8176c0dbf31e2e..c1785b5db4bbd44a41a94a2127bc76d2b1098b7b 100644
--- a/res/res_pjsip_logger.c
+++ b/res/res_pjsip_logger.c
@@ -195,10 +195,50 @@ static struct ast_cli_entry cli_pjsip[] = {
 	AST_CLI_DEFINE(pjsip_set_logger, "Enable/Disable PJSIP Logger Output")
 };
 
+static void check_debug(void)
+{
+	RAII_VAR(char *, debug, ast_sip_get_debug(), ast_free);
+
+	if (ast_false(debug)) {
+		logging_mode = LOGGING_MODE_DISABLED;
+		return;
+	}
+
+	logging_mode = LOGGING_MODE_ENABLED;
+
+	if (ast_true(debug)) {
+		ast_sockaddr_setnull(&log_addr);
+		return;
+	}
+
+	/* assume host */
+	if (ast_sockaddr_resolve_first_af(&log_addr, debug, 0, AST_AF_UNSPEC)) {
+		ast_log(LOG_WARNING, "Could not resolve host %s for debug "
+			"logging\n", debug);
+	}
+}
+
+static void global_reloaded(const char *object_type)
+{
+	check_debug();
+}
+
+static const struct ast_sorcery_observer global_observer = {
+	.loaded = global_reloaded
+};
+
 static int load_module(void)
 {
+	if (ast_sorcery_observer_add(ast_sip_get_sorcery(), "global", &global_observer)) {
+		ast_log(LOG_WARNING, "Unable to add global observer\n");
+		return AST_MODULE_LOAD_DECLINE;
+	}
+
+	check_debug();
+
 	ast_sip_register_service(&logging_module);
 	ast_cli_register_multiple(cli_pjsip, ARRAY_LEN(cli_pjsip));
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
@@ -206,6 +246,10 @@ static int unload_module(void)
 {
 	ast_cli_unregister_multiple(cli_pjsip, ARRAY_LEN(cli_pjsip));
 	ast_sip_unregister_service(&logging_module);
+
+	ast_sorcery_observer_remove(
+		ast_sip_get_sorcery(), "global", &global_observer);
+
 	return 0;
 }